初始化std :: vector <double>时出现分段错误

时间:2015-06-20 15:12:00

标签: c++11 segmentation-fault stdvector

以下一行出现分段错误的可能原因是什么?

std::vector<double> d(8);

1 个答案:

答案 0 :(得分:2)

  

以下一行出现分段错误的可能原因是什么?

线本身极不可能导致分段错误。唯一可能发生的方法就是你已经筋疲力尽了。做(gdb) x/i $pc。崩溃说明是PUSH还是CALL?如果是这样,堆栈耗尽可能是原因。

如果代码是使用优化编译的,并且崩溃指令是MOVDQA或类似的,那么堆栈错误对齐可能是错误的:堆栈中的某些代码没有在16字节边界上对齐堆栈,如当前ABI要求。您是否链接了一些非常古老的归档库?您是否使用-mpreferred-stack-boundary=21构建了一些代码?不好主意!

如果(更有可能)崩溃不会真正在该行发生,而是在来自该行的某些代码中,特别是如果被调用的代码在malloc内,之前的堆损坏很可能就是原因。

要找到它,请使用Valgrind或Address Sanitizer。