C-分割故障11(可能在结构中)甚至在主函数启动之前



我想知道我的代码中的错误在哪里。我刚刚开始学习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)

相关内容

  • 没有找到相关文章

最新更新