我想知道我的代码中的错误在哪里。我刚刚开始学习C,我才开始指针和数组,所以我不知道错误在哪里。这个问题似乎在我使用struct创建自己的数据类型的部分,因为我运行程序时都没有在控制台中显示的调试文本。我在互联网上寻找答案,但没有找到任何东西。任何帮助将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#define MAX_size 2000
typedef struct TMatrix{
int grid[MAX_size][MAX_size];
int sizex;
int sizey;
} TMATRIX;
int readSize(TMATRIX *matrix);
int main(void){
TMATRIX matrix;
printf("DEBUGn");
if (readSize(&matrix)==1){
printf ("Invalid input.n");
return 1;
}
printf("%d %dn", matrix.sizex,matrix.sizey);
return 0;
}
int readSize(TMATRIX *matrix){
printf("DEBUGn");
if (scanf("%d %d", &matrix->sizex, &matrix->sizey)!=2) return 1;
if (matrix->sizex<1 || matrix->sizey<1) return 1;
return 0;
}
在您的TMATRIX
结构中,您声明了一个整数为2000x2000。
2000*2000*4
是16兆字节。您正在使用大约自动变量。那个大小(如果sizeof(int)==4
,但如果sizeof(int)==8
,则可能是双重)。
因此,当编译器生成的代码试图为您的变量分配足够的堆栈室时,您可能会在达到第一个说明之前就溢出溢出,典型的堆栈尺寸小于该尺寸。
。修复:
- 增加堆栈(链接器选项)
- 使用全局变量(在
main
过程之外移动matrix
) - 使用
malloc
分配您的表,而不是静态(要保持多维方面,定义int (*grid)[MAX_size];
并在MAX_size * sizeof *grid
上进行MALLOC)