为什么是 SIGSEGV?
为什么此代码会抛出 SIGSEGV:
int main()
{
unsigned long toshuffle[9765625];
unsigned long i;
for (i=0; i< 1000; i++)
toshuffle[i]= i;
return 0;
}
指针将不胜感激。 (没有双关语:))
Why is this code throwing up a SIGSEGV:
int main()
{
unsigned long toshuffle[9765625];
unsigned long i;
for (i=0; i< 1000; i++)
toshuffle[i]= i;
return 0;
}
Pointers will be appreciated. (No Pun intended :))
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用 malloc() 来获取那么多内存。你的堆栈溢出了。
当然,当你使用完它后,你需要 free() 它。
注意:在 C++ 中,您需要将指针转换为正确的类型。
Use malloc() to get that much memory. You're overflowing the stack.
Of course when you're done with it, you'll need to free() it.
NOTE: In C++, you need to cast the pointer to the correct type.
可能是因为你无法在堆栈上分配 9765625 个长整型(这个网站又叫什么?:))。请改用
malloc()
。Probably because you can't allocate 9765625 longs on stack (what is this site called again? :)). Use
malloc()
instead.来自 联机帮助页
进程堆栈的最大大小(以字节为单位)。达到此限制后,会生成 SIGSEGV 信号。要处理此信号,进程必须使用备用信号堆栈 (sigaltstack(2) )。
From the manpage
The maximum size of the process stack, in bytes. Upon reaching this limit, a SIGSEGV signal is generated. To handle this signal, a process must employ an alternate signal stack (sigaltstack(2)).