我还没有永远使用过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();
}
答案 0 :(得分:4)
尝试将其设置为静态以将存储从堆栈移动到全局存储:
static double b[ROWCOL][ROWCOL];
将定义移到main
之外会做类似的事情,但会将名称b
引入文件命名空间。
此外,您可以尝试动态分配空间,存储将位于堆上:
double (*b)[ROWCOL] = malloc(sizeof(double) * ROWCOL * ROWCOL);
/* ... */
free(b);