为什么选择SIGSEGV?

3 c segmentation-fault

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

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

    unsigned long i;

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

Gyö*_*sek 16

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

unsigned long *toshuffle = malloc(9765625 * sizeof(unsigned long));
Run Code Online (Sandbox Code Playgroud)

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

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

  • "溢出堆栈",终于有人说了!:))) (8认同)
  • @Amit是对的但是比这更糟糕.编译器*不知道堆栈有多大,它只是生成指令.链接器*确实知道堆栈大小,但不知道你的代码将如何使用它.这意味着你必须在运行时失败. (5认同)
  • 在C++中你会做新的长[9765625],并且不会既没有强制转换也没有大小... :) (2认同)

Luk*_*ský 9

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