2015-06-20 4 views

ответ

2

Каковы возможные причины ошибки сегментации на следующей строке?

Линия сама по себе чрезвычайно маловероятна, чтобы вызвать ошибку сегментации. Единственный способ, который может произойти, это то, что вы исчерпали стек. Do (gdb) x/i $pc. Является ли инструкция по сбою a PUSH или CALL? Если это так, усталость стека, вероятно, является причиной.

Если код скомпилирован с оптимизацией, а команда сбоя - MOVDQA или аналогичная, то вероятно, что ошибочное выравнивание стека может быть виновато: некоторый код в стеке не выравнивает стек по 16-байтовой границе, как требуется текущий ABI. Вы связываетесь с некоторыми действительно старыми архивными библиотеками? Вы строите код с -mpreferred-stack-boundary=2 или 1? Плохая идея!

Если (более вероятно) авария не действительно случиться в этой линии, а в какой-то код называется из, что линия, и особенно, если вызываемый код находится внутри malloc, то предыдущая коррупция кучи скорее всего, причина.

Чтобы найти его, используйте Valgrind или Address Sanitizer.

+0

Как сразу заметил @Dani, проблема была прежней кучевой коррупцией. – dPol

Смежные вопросы