我想知道我的代码哪里出了问题。我刚开始学习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("DEBUG\n");
if (readSize(&matrix)==1){
printf ("Invalid input.\n");
return 1;
}
printf("%d %d\n", matrix.sizex,matrix.sizey);
return 0;
}
int readSize(TMATRIX *matrix){
printf("DEBUG\n");
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
则可能是 double )。
因此,在到达第一条指令之前,您可能会遇到堆栈溢出,当编译器生成的代码尝试为变量分配足够的堆栈空间时,典型的堆栈大小会小于该值。
修复:
- 增加堆栈(链接器选项)
- 使用全局变量(将
matrix
移到main
过程之外) - 使用
malloc
分配表,而不是静态分配(为了保持多维方面,定义int (*grid)[MAX_size];
并在上创建一个malloc MAX_size * sizeof *grid
)
关于c - 在主函数启动之前出现段错误 11(可能在结构中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40834180/