Memset分段错误

时间:2018-02-04 03:10:42

标签: c segmentation-fault stack-overflow memset

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

我的数组的最大长度为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;
}

1 个答案:

答案 0 :(得分:2)

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

另一个选择是change the default stack size