我想读取一个文本文件并将其数据放入二维数组中。此代码适用于小文本文件,如0 1 1 1 0 1 1 0 1 1 1 1,但为大文本文件和648x512阵列提供分段错误。可能是什么问题呢?这可能是一个更好的代码吗?
链接到大型txt文件:
http://mimoza.marmara.edu.tr/~omer.korcak/courses/CSE246%20-%20Spring2012/squares.txt
#include<stdio.h>
FILE *input;
int x=0, y=0, R=0, C=0,c=0;
int main()
{
input = fopen("squares.txt", "r");
C = 512;
R = 648;
int M[R][C];
for(x = 0; x < R; ++x ) {
for(y = 0; y < C; ++y ) {
fscanf( input, "%d", &c );
M[x][y]=c;
}
}
}
答案 0 :(得分:2)
当数组大小很大时,例如:648x512, M[R][C]
用完了程序的所有堆栈空间,因此会出现分段错误。
尝试使用动态数组,并记得在使用后释放它。
int** M= new int*[R];
for(int i = 0; i < R; ++i)
M[i] = new int[C];
答案 1 :(得分:2)
因为你使用了太多的堆栈空间。 Main需要一个足够大的堆栈来容纳M,这将占用512x648x(sizeof(int))。假设一个4字节的int,即一个变量的1327104字节。根据您的环境,这是很多。如果您打算使用多个内存,请动态分配它:
int M [] new int [C * R]或int M [] [] = new int [C] [R](相同的差异,第一个实际上更容易使用)
干杯