我试图在Windows上编译one of my games,但不幸的是,无论如何,每次运行程序时我都会遇到此分段错误。
编译成功,没有任何警告。
编程接收信号SIGSEGV,分段故障。
__ chkstk_ms()at ../../../../../ src / gcc-4.8.1 / libgcc / config / i386 / cygwin.S:172
172 ../../../../../src/gcc-4.8.1/libgcc/config/i386/cygwin.S:没有这样的文件或目录。
我试过了:
我已多次从源构建所有依赖项,尝试静态和动态链接。
调试也没有帮助--GDB在输入main()
时就给我提供了错误消息。我使用过-g3
和-O0
个标记。
我怎样才能弄清楚发生了什么?
答案 0 :(得分:3)
在Windows上,默认堆栈大小小于Linux。如果溢出堆栈,__ chkstk_ms似乎是一个崩溃的函数。
您可能会尝试找出代码中创建大量堆栈变量或执行非常深度递归的位置,然后解决此问题。
或者,您可以添加编译标志以增加堆栈大小。见http://trac.sagemath.org/ticket/13960。
答案 1 :(得分:1)
尝试增加堆栈大小。不要问我怎么样,我不知道。
失败的调用(__chkstk_ms)看起来像内部例程,它检查是否有足够的堆栈空间用于即将执行的函数。