首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么选择SIGSEGV?

为什么选择SIGSEGV?
EN

Stack Overflow用户
提问于 2009-10-27 16:04:50
回答 3查看 565关注 0票数 3

为什么这段代码抛出一个SIGSEGV

代码语言:javascript
复制
int main()
{
    unsigned long toshuffle[9765625];

    unsigned long i;

    for (i=0; i< 1000; i++)
        toshuffle[i]= i;

    return 0;
}

指示器将不胜感激。(无双关语:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-27 16:08:01

使用malloc()来获得这么多内存。堆栈溢出了。

代码语言:javascript
复制
unsigned long *toshuffle = malloc(9765625 * sizeof(unsigned long));

当然,当您使用完它时,您需要释放它()。

注意:在C++中,您需要将指针转换为正确的类型。

票数 16
EN

Stack Overflow用户

发布于 2009-10-27 16:07:19

可能是因为你不能在堆栈上分配9765625个长度(这个站点叫什么来着?:)。请改用malloc()

票数 9
EN

Stack Overflow用户

发布于 2009-10-27 16:56:52

manpage

  • RLIMIT_STACK

进程堆栈的最大大小,以字节为单位。达到此限制时,会生成SIGSEGV信号。要处理此信号,进程必须使用备用信号堆栈(sigaltstack(2))。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1629352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档