2015-09-11 1 views
-4

Donc, j'ai été gâté par python et j'essaie de reprendre C. Je reçois cette faute de seg et je pense que je comprends la raison, mais je ne sais pas pourquoi cela se passe.Erreur de segmentation C erreur

long head = 1; // atleast that is what I was hoping for.. 
long *localranks = (long*) malloc(n * sizeof(long)); // size_t n = 50; 
localranks[head] = 0; // seg fault here.. 


printf("head is %lu %d\n", head, head); 

donne head is 4294967297 1

Ainsi, alors que la tête doit être 1 .. Je devine, il est passé à la valeur des déchets .. Comment puis-je résoudre ce problème?

+4

Avertissement obligatoire: [Dois-je diffuser le résultat de malloc?] (Http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). En ce qui concerne le bug réel, vous devez définir un point d'arrêt sur la ligne de problème et inspecter les valeurs de 'head',' n' et 'localranks'. –

+0

@PaulR merci .. mais comment? – Fraz

+3

Pour ajouter au commentaire de Paul, assurez-vous de vérifier la valeur de retour de 'malloc'. De ce que je vois, malloc doit avoir retourné 'NULL' auquel vous essayez d'accéder. –

Répondre

1

Je suis un peu pas exactement capable de reproduire du tout, mais je pense que si le défaut seg est l'endroit où vous pointez alors probablement la raison doit être un échec malloc, essayez ci-dessous le code et voir si cela est le cas

long head = 1; // atleast that is what I was hoping for.. 
    long *localranks = (long*) malloc(n * sizeof(long)); // size_t n = 50; 
    if(localranks == NULL) { 
     printf("malloc fail "); 
     exit (0); 
    } 
    localranks[head] = 0; // seg fault here.. 
    printf("head is %lu %ld\n", head, head); 
+0

non le malloc réussit .. – Fraz