为什么我不能定义大于300 * 300的二维数组?

可能重复:
C中的最大数组大小

这是我的代码。 我从两个文本文件中读取两个字符串并存储它们。 然后我定义了两个二维数组,但问题是,大小非常有限。 例如,如果我将size定义为400,那么在编译时会遇到堆栈溢出。

#include  #include  #include  #include  #include  #include  #define BUFSIZE 2000 #define size 400 int main() { int a = 0, len1 = 0, len2 = 0; char string1[BUFSIZE]; char string2[BUFSIZE]; char *suc; FILE *fp1 = fopen("input1.txt", "r"); FILE *fp2 = fopen("input2.txt", "r"); if ((fp1 == 0)||(fp2 == 0)) { fprintf(stderr, "Error while opening"); return 0; } suc = fgets(string1, BUFSIZE, fp1); if (!suc) { // fgets failed, what now? exit? return EXIT_FAILURE; } suc = fgets(string2, BUFSIZE, fp2); if (!suc) { // see above return EXIT_FAILURE; } len1=strlen(string1); len2=strlen(string2); int LCSLength[size][size]; for(int i=0;i<size;i++) { for(int j=0;j<size;j++) { LCSLength[i][j]=0; } } int index[size][size]; for(int i=0;i<size;i++) { for(int j=0;j<size;j++) { index[i][j]=0; } } printf("The two strings are: \n\n"); printf("%s\n", string1); printf("The length is %d\n\n", len1); printf("%s\n", string2); printf("The length is %d\n\n", len2); int x=0; scanf("%d", &x); fclose(fp1); fclose(fp2); return 0; } 

它与我的编译器有关吗? 它是MS visual C ++ 2010 Express。 先感谢您。

 int LCSLength[size][size]; int index[size][size]; 

那些是主导的两个大的。 2 x 4 x 400 x 400 = 1,280,000字节。 进程主线程的默认堆栈大小是1兆字节,它们不适合。 在main()入口点探测堆栈的__alloca_probe()调试函数会生成此站点命名的exception。

线程的堆栈大小在CreateThread()中指定,但进程的主线程由Windows启动。 它从EXE标头IMAGE_OPTIONAL_HEADER.SizeOfStackReserve字段中检索请求的大小。 这是构建程序时链接器编写的。 您可以使用/ STACK链接器选项覆盖默认值,在IDE中它由Project + Properties,Linker,System,Stack Reserve Size选项设置。