为什么选择SIGSEGV?

时间:2009-10-27 08:04:50

标签: c segmentation-fault

为什么这段代码会引发SIGSEGV

int main()
{
    unsigned long toshuffle[9765625];

    unsigned long i;

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

    return 0;
}

指针将不胜感激。 (没有双关语:))

3 个答案:

答案 0 :(得分:16)

使用malloc()获取那么多内存。你堆满了。

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

当然,当你完成它之后,你需要释放()它。

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

答案 1 :(得分:9)

可能是因为你不能在堆栈上分配9765625多头(这个网站又叫什么?:))。请改用malloc()

答案 2 :(得分:2)

来自manpage

  • RLIMIT_STACK

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