2015-06-20 58 views

回答

2

什么是分段错误的在下面一行的可能原因是什么?

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

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

如果(更容易)的崩溃不会真的发生在该行,而是从称为该行一些代码,特别是如果被调用代码里面malloc,那么以前的堆腐败最有可能的原因。

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

+0

@Dani马上指出,问题是以前的堆腐败。 – dPol

相关问题