2014-10-16 5 views
0

Я пишу код, который вычисляет окончательный класс учащегося с учетом оценок и весов для каждого компонента. Я сталкиваюсь с ошибкой сегментации, когда предполагается, что следующий цикл цикла будет завершен.Ошибка сегментации в последней итерации цикла for

for (i = 0; i < course.numOfSchemes; i++){ 
printf("Marking scheme# %u \n", i); 
    for (j = 0; j < course.numOfComponents; j++){ 
     printf(" Enter %s weight: ",course.components[j]); 
     scanf("%f", &course.weights[i][j]); 
    } 
    printf("End: %u \n \n",i); 
} 
printf("rrr"); 

Итак, предполагающих course.numOfSchemes = 2 и course.numOfComponents = 3, это то, что пробный запуск будет выглядеть. Вы заметите, что цикл проходит от начала до конца дважды, но текст «rrr» никогда не печатается. Поэтому я предполагаю, что ошибка происходит во время проверки, которая происходит, когда цикл пытается выйти.

Marking scheme# 0 
    Enter A weight: 20 
    Enter B weight: 30 
    Enter C weight: 50 
End: 0 

Marking scheme# 1 
    Enter A weight: 40 
    Enter B weight: 40 
    Enter C weight: 20 
End: 1 

Segmentation fault (core dumped) 
+1

попробовать 'Е (" ррр \ n ");' – BLUEPIXY

+0

И если вы сделаете это как @BLUEPIXY, вы, вероятно, обнаружите, что ваш segfault на самом деле происходит позже. 'stdout' обычно буферизуется в строке, и буфер обычно не сбрасывается, когда программа прерывается. –

+0

Является ли 'course.weights' массивом типа' float'? –

ответ

0

printf() не вровень после вызова, если у вас есть символ новой строки в строке формата. Вполне вероятно, что у вас есть какой-то другой код после printf(), что вызывает переполнение буфера, как это:

printf("printed\n"); 
printf("not printed"); 
char a[1]; 
for (int i = 0; i < 100; i++) 
{ 
    a[i] = 0xff; 
} 

Так выход этого образца будет так:

printed 
Segmentation fault (core dumped) 
+0

Спасибо! Я сошел с ума! –

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