以下一行出现分段错误的可能原因是什么?
std::vector<double> d(8);
答案 0 :(得分:2)
以下一行出现分段错误的可能原因是什么?
线本身极不可能导致分段错误。唯一可能发生的方法就是你已经筋疲力尽了。做(gdb) x/i $pc
。崩溃说明是PUSH
还是CALL
?如果是这样,堆栈耗尽可能是原因。
如果代码是使用优化编译的,并且崩溃指令是MOVDQA
或类似的,那么堆栈错误对齐可能是错误的:堆栈中的某些代码没有在16字节边界上对齐堆栈,如当前ABI要求。您是否链接了一些非常古老的归档库?您是否使用-mpreferred-stack-boundary=2
或1
构建了一些代码?不好主意!
如果(更有可能)崩溃不会真正在该行发生,而是在来自该行的某些代码中,特别是如果被调用的代码在malloc
内,之前的堆损坏很可能就是原因。
要找到它,请使用Valgrind或Address Sanitizer。