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

时间:2013-05-06 21:51:02

标签: c file-io multidimensional-array

我想读取一个文本文件并将其数据放入二维数组中。此代码适用于小文本文件,如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;

        }
    }
}

2 个答案:

答案 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](相同的差异,第一个实际上更容易使用)

干杯