У меня есть программа, которая принимает два параметра, целое число и строку. Первое представляет количество строк, которые нужно прочитать из файла, имя которого является вторым аргументом. Файлы имеют целочисленное значение для каждой строки.C fopen seg fault
int main(int argc, char* argv[])
{
// the size of the data set
long dataSize = atol(argv[1]);
// an array to store the integers from the file
long dataSet[dataSize];
// open the file
fp = fopen(argv[2], "r");
// exit the program if unable to open file
if(fp == NULL)
{
printf("Couldn't open file, program will now exit.\n");
exit(0);
} // if
У меня есть файл с именем data10M с 10 миллионами целых чисел. Он отлично работает, пока я не сменил первый аргумент на что-то большее, чем около 1050000, после чего программа выдает ошибку сегментации на линии fopen.
В Windows процесс по умолчанию размер стека составляет 1Мб, на Linux это 8MB. Большинство компиляторов помещают переменные, включая массивы, в стек. В 64-битной системе один «длинный» может быть 64 бита (8 байтов). Вы делаете математику. :) –
'long dataSet [dataSize];' изменять на 'static' или использовать' malloc', потому что для обеспечения стека – BLUEPIXY