Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 膜组分割故障_C_Segmentation Fault_Stack Overflow_Memset - Fatal编程技术网

C 膜组分割故障

C 膜组分割故障,c,segmentation-fault,stack-overflow,memset,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 = 1000

我在初始化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;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{ 
//矩阵的集维数
整数长度=10000;
双矩阵1[长度][长度];
//这条线以分段错误结束。
memset(矩阵1,0,长度*长度*大小(双精度));
返回0;
}

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


另一个选择是。

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


还有一个选项是。

什么是
matrix2
,为什么定义中的数据类型与
memset
中的数据类型不同?对不起,这是代码示例中的一个输入错误。我仍然有这个问题。感谢您的提示:)哇
10000*10000*8=80000000
什么是
matrix2
,为什么定义中的数据类型和
memset
中的数据类型不同?对不起,这是代码示例中的一个输入错误。我仍然有这个问题。感谢您的注释:)哇
10000*10000*8=80000000
具体来说,类型为
double[10000][10000]
的矩阵大约是800MB。典型的堆栈大小是8MB。明白了,谢谢。我使用了:double matrix1=(double*)malloc(lengthlength*sizeof(double));具体来说,
double[10000][10000]
类型的矩阵大约为800MB。典型的堆栈大小是8MB。明白了,谢谢。我使用了:double matrix1=(double*)malloc(lengthlength*sizeof(double));