C语言 内存集分段错误



初始化二维数组后出现分段错误。我做了一些研究,但我不知道如何解决这个问题,有人可以帮助我吗?

我的数组的最大长度是 10000,必须通过可变长度设置。

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) 
{ 
    //Set dimension of matrices  
    int length = 10000;
    double matrix1[length][length]; 

    //This line ends up in segmentation fault.  
    memset( matrix1, 0, length*length*sizeof(double));
    return 0;
}

现代 C 编译器在堆栈上分配局部变量,其大小有限。变量double matrix1[length][length]太大而无法容纳,这会导致堆栈溢出并导致分段错误。(是的,您甚至在调用memset之前就会遇到段错误。 要么使matrix1成为全局变量,要么将动态内存分配与 malloc 一起使用。实际上,如果您使用calloc而不是malloc,则无需memset

另一个选项是更改默认堆栈大小。

相关内容

  • 没有找到相关文章

最新更新