2013-03-31 3 views
1

В строке 42 я получаю сигнал Program received signal SIGSEGV, Segmentation Fault.Ошибка SIGSEGV при открытии файла

Из исследования, которое я сделал, я считаю, что это имеет какое-то отношение к моим указателям, но я действительно не знаю, что.

Вот стек вызовов во время отладки:

#0 7560ECC0 strxfrm_l() (C:\windows\syswow64\msvcrt.dll:??) 
#1 75665864 putwchar() (C:\windows\syswow64\msvcrt.dll:??) 
#2 756658D4 msvcrt!fscanf() (C:\windows\syswow64\msvcrt.dll:??) 
#3 00401494 readFile(filename=0x404024 <_Jv_RegisterClasses+4210724> "C:\\input.txt", seed=0x75601162 <onexit+53>, minSize=0x75655bc4 <msvcrt!atexit+13>, maxSize=0x401ef0 <__do_global_dtors>, count=0x28ff94) (C:\Users\xxxxx\Dropbox\School\Spring 13\Computer Sci\Project 4_Pxxxxxx\main.c:42) 
#4 00401375 main() (C:\Users\xxxxx\Dropbox\School\Spring 13\Computer Sci\Project 4_Pxxxxxxxx\main.c:28) 

Соответствующий код:

Вот основной():

int main() 
{ 
    int array[4], min, max, Ans, avg, count; 

    readFile("C:\\input.txt", array[0], array[1], array[2], array[3]); 
    validateInput(array[0], array[1], array[2], array[3]); 
    generateNumbers(array, array[0], array[1], array[2], array[3]); 
    calculateStatistics(array, 4, min, max, Ans, avg); 
    printReport(array, 4, array[1], count, min, max, Ans, avg); 

} 

35 bool readFile(char *filename, int *seed, int *minSize, int *maxSize, int *count) 
36 { 
37 int readCount; 
38 FILE *fp; // FILE must be ALL CAPS 
39 bool status = true; 
40 
41 fp=fopen("input.txt", "r"); // Opens the file for reading 
42 readCount = fscanf(fp, "%d %d %d %d", seed, minSize, maxSize, count); 
43 if(readCount != 4) 
44 { 
45  printf("At least one of the supplied values is invalid.\n"); 
46  status = false; 
47 } 
48 fclose(fp); // Closes the file 
49 return status; 
50 } 

Что программа пытается открыть это файл и передать значения в другую функцию для генерации массива случайных чисел.

+2

'fopen', вероятно, не работает, а' fp' - 'NULL'. Или один из указателей, которые вы проходите, ошибочен. – cnicutar

+0

Вы проходите процедуру "filename", но не используете его. Это намеренно? –

+0

Это имя файла должно быть действительно 'const char *', между прочим. – 2013-03-31 18:03:28

ответ

2

Эта линия

readFile("C:\\input.txt", array[0], array[1], array[2], array[3]); 

является виновником. Вы передаете значения вместо указателей на значения. Попробуйте следующее:

readFile("C:\\input.txt", &array[0], &array[1], &array[2], &array[3]); 
+1

Компилятор должен был закричать, чтобы получить этот код. – alk

+0

Это сработало. Спасибо Джереми! Мне действительно нужно работать над моими указателями. – paulw793

+0

@alk Да, я просто думал об этом сам. Должно быть как минимум предупреждение. – JeremyP

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