Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.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_Arrays_Segmentation Fault - Fatal编程技术网

C 分段故障-大阵列

C 分段故障-大阵列,c,arrays,segmentation-fault,C,Arrays,Segmentation Fault,当我试图编译用C编写的代码时,我遇到了一个奇怪的错误 segmentation fault (core dumped) 在我的代码中,我有很多非常大的双数组(比如长度接近100000的数组)。我初始化了一个双精度数组,当我尝试在之后立即初始化一个相同大小的数组(大约100000个长度)时,它给出了分段错误。奇怪的是,这取决于数组的大小。例如,如果我这样做 double arr[70000]; 它给了我分割错误,但是 double arr[60000]; 没有给

当我试图编译用C编写的代码时,我遇到了一个奇怪的错误

 segmentation fault (core dumped)
在我的代码中,我有很多非常大的双数组(比如长度接近100000的数组)。我初始化了一个双精度数组,当我尝试在之后立即初始化一个相同大小的数组(大约100000个长度)时,它给出了分段错误。奇怪的是,这取决于数组的大小。例如,如果我这样做

 double arr[70000];       
它给了我分割错误,但是

 double arr[60000];     
没有给我错误。如果有帮助的话,我正在linux机器上运行我的代码。我真的需要很多不同的非常大的双阵列。发生了什么事?

您遇到了“堆栈溢出”;基本上,您已经耗尽了程序可用的堆栈空间

如果您在堆上(在堆存储中)分配阵列,您可能就没事了

使用C,您可能会使用malloc指令分配内存

当然,在使用完内存后,您会记得使用
free
指令返回内存。

您遇到了“堆栈溢出”;基本上,您已经耗尽了程序可用的堆栈空间

如果您在堆上(在堆存储中)分配阵列,您可能就没事了

使用C,您可能会使用malloc指令分配内存

当然,在使用完内存后,您会记得使用
free
指令返回内存。

您遇到了“堆栈溢出”;基本上,您已经耗尽了程序可用的堆栈空间

如果您在堆上(在堆存储中)分配阵列,您可能就没事了

使用C,您可能会使用malloc指令分配内存

当然,在使用完内存后,您会记得使用
free
指令返回内存。

您遇到了“堆栈溢出”;基本上,您已经耗尽了程序可用的堆栈空间

如果您在堆上(在堆存储中)分配阵列,您可能就没事了

使用C,您可能会使用malloc指令分配内存


当然,当您使用完内存后,您会记得使用
free
指令返回内存。

您尝试过使用gdb吗?这些是数组局部变量吗?如果是这样的话,您将得到一个堆栈溢出…60000个双倍的副本放入半兆字节的堆栈中;70000双打不行。我猜你的堆栈大小是半兆字节。或者,更可能的情况是,您的堆栈大小更大,但您拥有足够多的这些大型阵列,已经超出了限制。使用动态内存分配(
malloc()
等)来分配堆上的数组。确保每一次分配都是免费的;如果你不这样做的话,你的钱会用完的。(并且在使用返回的指针之前检查每个分配都是成功的)。建议的重复问题是名义上的C++,并且处理较大的数组大小(4 MIB而不是0.5 MIB),但否则很可能是同一个问题。你使用GDB了吗?这些数组局部变量吗?如果是这样的话,您将得到一个堆栈溢出…60000个双倍的副本放入半兆字节的堆栈中;70000双打不行。我猜你的堆栈大小是半兆字节。或者,更可能的情况是,您的堆栈大小更大,但您拥有足够多的这些大型阵列,已经超出了限制。使用动态内存分配(
malloc()
等)来分配堆上的数组。确保每一次分配都是免费的;如果你不这样做的话,你的钱会用完的。(并且在使用返回的指针之前检查每个分配都是成功的)。建议的重复问题是名义上的C++,并且处理较大的数组大小(4 MIB而不是0.5 MIB),但否则很可能是同一个问题。你使用GDB了吗?这些数组局部变量吗?如果是这样的话,您将得到一个堆栈溢出…60000个双倍的副本放入半兆字节的堆栈中;70000双打不行。我猜你的堆栈大小是半兆字节。或者,更可能的情况是,您的堆栈大小更大,但您拥有足够多的这些大型阵列,已经超出了限制。使用动态内存分配(
malloc()
等)来分配堆上的数组。确保每一次分配都是免费的;如果你不这样做的话,你的钱会用完的。(并且在使用返回的指针之前检查每个分配都是成功的)。建议的重复问题是名义上的C++,并且处理较大的数组大小(4 MIB而不是0.5 MIB),但否则很可能是同一个问题。你使用GDB了吗?这些数组局部变量吗?如果是这样的话,您将得到一个堆栈溢出…60000个双倍的副本放入半兆字节的堆栈中;70000双打不行。我猜你的堆栈大小是半兆字节。或者,更可能的情况是,您的堆栈大小更大,但您拥有足够多的这些大型阵列,已经超出了限制。使用动态内存分配(
malloc()
等)来分配堆上的数组。确保每一次分配都是免费的;如果你不这样做的话,你的钱会用完的。(并且在使用返回的指针之前检查每个分配是否成功))所提出的重复问题名义上是C++,并且处理较大的数组大小(4 MIB而不是0.5 MIB),但否则很可能是相同的问题。