Возможные причины ошибки сегментации при выходе из функции - PullRequest
4 голосов
/ 08 августа 2011

Какие возможные причины могут возникнуть из-за ошибки сегментации при выходе из функции в C ++? Под этим я подразумеваю, что у меня есть воспроизводимая ошибка сегментации в программе на C ++, и когда я исследую использование GDB, он говорит:

 Program received signal SIGSEGV, Segmentation fault.
 FooBar (bla=...) at foo.cpp:59
 59     }

где указанная строка содержит закрывающую скобку моей функции.

Ответы [ 4 ]

5 голосов
/ 08 августа 2011

Причин может быть много. Запустите программу под Valgrind и, скорее всего, она сообщит вам точную причину или, по крайней мере, поможет исследовать и сузить проблему.

5 голосов
/ 08 августа 2011

Вполне вероятно, что переполнение буфера в каком-либо буфере, расположенном в вашем стеке.Это перезаписывает адрес возврата, поэтому, когда ваш код пытается вернуться к предыдущему кадру стека, он вместо этого переходит на некоторый случайный адрес, который, скорее всего, не является неисполнимым, поэтому вы получаете ошибку сегментации.

Ноне видя больше кода или дополнительной информации о сбое, невозможно сказать, какова точная причина.

1 голос
/ 08 августа 2011

Мое первое предположение - деструктор класса освобождает недопустимый указатель.

0 голосов
/ 21 декабря 2018

в моем случае у меня был std :: thread, который не был правильно соединен.

...