2015-09-11 3 views
-4

Итак, я был испорчен python и снова пытаюсь взять C. Я получаю эту ошибку seg, и я думаю, что понимаю причину, но не уверен, почему это происходит.Ошибка сегментации Ошибка C

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); 

дает head is 4294967297 1

Таким образом, в то время как голова должна быть 1 .. Я предполагаю, что, оно передается в это значение мусора .. Как я это исправить?

+4

Обязательное предупреждение: [Я делаю результат malloc?] (Http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). Что касается фактической ошибки, вы должны установить точку останова на проблемной строке и проверить значения 'head',' n' и 'localranks'. –

+0

@PaulR спасибо .. но как? – Fraz

+3

Чтобы добавить комментарий к Paul, обязательно проверьте возвращаемое значение 'malloc'. Из того, что я вижу, malloc должен вернуть 'NULL', к которому вы пытаетесь получить доступ. –

ответ

1

я вроде не совсем в состоянии воспроизвести его на всех, но я подозреваю, что если сегментный вина, где вы указываете, то, вероятно, причина должна быть сбой таНос, попробуйте ниже код и посмотреть, если это так

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

no malloc преуспевает .. – Fraz

Смежные вопросы