为什么是 SIGSEGV?

发布于 2024-08-08 23:30:57 字数 302 浏览 1 评论 0原文

为什么此代码会抛出 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

老娘不死你永远是小三 2024-08-15 23:30:57

使用 malloc() 来获取那么多内存。你的堆栈溢出了。

unsigned long *toshuffle = malloc(9765625 * sizeof(unsigned long));

当然,当你使用完它后,你需要 free() 它。

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

Use malloc() to get that much memory. You're overflowing the stack.

unsigned long *toshuffle = malloc(9765625 * sizeof(unsigned long));

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.

一腔孤↑勇 2024-08-15 23:30:57

可能是因为你无法在堆栈上分配 9765625 个长整型(这个网站又叫什么?:))。请改用malloc()

Probably because you can't allocate 9765625 longs on stack (what is this site called again? :)). Use malloc() instead.

漫漫岁月 2024-08-15 23:30:57

来自 联机帮助页

  • RLIMIT_STACK

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

From the manpage

  • RLIMIT_STACK

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)).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文