当我尝试打印v
的值时,以下程序崩溃。我想知道为什么。有什么建议吗?
#include <stdio.h>
int main() {
int v[5000000];
printf("\n\nv = %p", v);
return 0;
}
编辑:如果不是分配5000000个元素,而是分配500000或更少的元素,程序不会出现段错误。
编辑(2):增加堆栈大小解决了问题。在Linux上,我在阅读了stephane-rouberol(使用ulimit -s <some_large_number>
)的答案后增加了堆栈大小。
答案 0 :(得分:1)
恭喜,您有堆栈溢出:)
找到一种方法来增加堆栈的大小或只是动态分配数组:
int* v = malloc( 5000000 * sizeof *v);
/* do something */
free( v );
答案 1 :(得分:1)
堆栈溢出!
如果您使用ulimit -s
或bash
limit stacksize
[t]csh
或者不使用堆栈,您可以将堆与malloc
答案 2 :(得分:0)
你已经有了原因。对于将分配5000000
的程序堆栈,v
太大而无法处理。您应该使用malloc
动态分配它。
答案 3 :(得分:0)
程序的堆栈大小取决于编译器开关,默认值不同于OS到OS。在你的情况下,它听起来好像堆栈太小,无法容纳那么大的数字。请参阅编译器(链接器)开关以增加堆栈大小。
答案 4 :(得分:0)
尝试
printf("\n\nv = %p", (void *)v);
答案 5 :(得分:0)
正如其他人所说,堆栈溢出。要了解代码实际崩溃的原因和时间,这就是行之间的内容: