从文件中读取并传递给C中的二维数组



我想读取一个文本文件,并把它的数据到一个二维数组。这段代码适用于像0 1 1 1 1 1 1 1 1 1 1这样的小文本文件,但是对于大文本文件和648x512数组会出现分割错误。有什么问题吗?还有什么更好的代码可以做到这一点呢?

链接到一个大文本文件:

http://mimoza.marmara.edu.tr/omer.korcak/课程/CSE246 % 20 - % 20 spring2012/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;
        }
    }
}

因为您使用了太多的堆栈空间。Main将需要一个足够大的堆栈来容纳M,它将占用512x648x(sizeof(int))。假设是一个4字节的整型,一个变量就是1327104字节。这取决于你的环境,这是很多。如果你要使用更多的内存,动态分配它:

int M[] new int[C*R]或int M[][] = new int[C][R](相同的区别,第一个实际上更容易使用)

欢呼

当数组大小较大时,例如:648x512, M[R][C]耗尽了程序的所有堆栈空间,因此会出现分段错误。

尝试使用动态数组,并记得在使用后释放它。

int** M= new int*[R];
for(int i = 0; i < R; ++i)
    M[i] = new int[C];

相关内容

  • 没有找到相关文章

最新更新