我从来没有使用过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();
}

最佳答案

尝试使其变为静态,以将存储从堆栈移动到全局存储:

static double b[ROWCOL][ROWCOL];


将定义移到main之外会执行类似的操作,但是会将名称b引入文件名称空间。

您也可以尝试动态分配空间,利用该空间将存储空间放在堆上:

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

关于c - 无法在C中初始化大型2D数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25838602/

10-13 08:51