Memset 分段错误
Memset segmentation fault
初始化二维数组后出现分段错误。我做了一些研究,但我不知道如何解决这个问题,有人可以帮助我吗?
我的数组的最大长度是 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
。
还有一个选择是change the default stack size。
初始化二维数组后出现分段错误。我做了一些研究,但我不知道如何解决这个问题,有人可以帮助我吗?
我的数组的最大长度是 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
。
还有一个选择是change the default stack size。