无法初始化C中的大型2d数组

时间:2014-09-14 22:23:53

标签: c multidimensional-array

我还没有永远使用过C,现在我需要初始化一个大的2d数组来进行一些计算。

我收到错误First-chance exception at 0x003717B7 in Project1.exe: 0xC00000FD: Stack overflow (parameters: 0x00000000, 0x00382000).

这条线是原因,但只有当索引很大时,500才是我必须使用的最高值。我可以初始化的最高指数是356。

double b[500][500];

我该怎么编译呢?我是从VS 2013编译的。

我必须运行代码:

#include <stdio.h>

main() {
    #define ROWCOL 356

    int i, j;

    double column_sum[ROWCOL];
    double b[ROWCOL][ROWCOL];

    for (i = 0; i < ROWCOL; i++) {
        column_sum[i] = 0;
        for (j = 0; j < ROWCOL; j++) {
            column_sum[i] += b[j][i];
        }
    }

    printf("Press any key to close...\n");
    getch();
}

1 个答案:

答案 0 :(得分:4)

尝试将其设置为静态以将存储从堆栈移动到全局存储:

static double b[ROWCOL][ROWCOL];

将定义移到main之外会做类似的事情,但会将名称b引入文件命名空间。

此外,您可以尝试动态分配空间,存储将位于堆上:

double (*b)[ROWCOL] = malloc(sizeof(double) * ROWCOL * ROWCOL);
/* ... */
free(b);