#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 МБ поместится в стек.