Почему возникает ошибка, когда я пытаюсь создать матрицу в C, используя размер файла в виде строки и столбцов?

#c #matrix #segmentation-fault

Вопрос:

Я пытаюсь создать матрицу, используя размеры файлов, это файлы размером 10 кб. Я вычисляю размер файла с помощью этой функции

 long calculateDim(char *path) {
FILE *fd= fopen(path,"r ");
fseek(fd,0,SEEK_END);
long dim= ftell(fd);
fclose(fd);
return dim;
}
 

Матричный код:

 long dim1=calculateDim(path1);
long dim2=calculateDim(path2);
long matrix[dim1   1][dim2   1];
 

Ошибка в том, что :

Процесс завершен с кодом выхода 139 (прерван сигналом 11: SIGSEGV)

В частности, он возвращает ошибку сегментации в строке создания матрицы

Комментарии:

1. Насколько велики dim1 и dim2 ? Сколько байтов, как вы тогда ожидаете matrix , займет? Поместится ли объект такого размера в вашем стеке? (или вам следует использовать динамическую память?)

2. dim1 и dim2 равны 10038, то есть размер файлов в байтах. Мне также нужно будет использовать файлы большего размера. Матрица в этом случае будет 10038*10038, и она может поместиться в стек

Ответ №1:

Ты написал:

dim1 и dim2 равны 10038, то есть размер файлов в байтах. Мне также нужно будет использовать файлы большего размера. Матрица в этом случае будет 10038*10038, и она может поместиться в стек

Если ваша матрица должна содержать более 100 миллионов элементов, каждый из которых занимает 8 байт, то матрица должна занимать немного меньше 800 МБ памяти.

Вы утверждаете, что это поместится в стопку. Почему?
Типичный размер стека для большинства приложений составляет от 1 до 4 МБ.
Я очень сомневаюсь, что 800 МБ поместится в стек.