|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.12.2021, 16:49 | #1 |
Пользователь
Регистрация: 03.03.2018
Сообщений: 20
|
Segmentation fault при выходе из функции.
Здравствуйте.
Подскажите, пожалуйста, в какую сторону стоит копать, когда падает программа при выходе из функции? Всё обложил логированием и вижу, что именно после return программа падает. В чём может быть суть? |
08.12.2021, 16:57 | #2 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
Код покажите или секрет?
|
08.12.2021, 17:12 | #3 |
Пользователь
Регистрация: 03.03.2018
Сообщений: 20
|
Код огромный и коммерческий.
В голову приходит только одно - мы где-то затираем адрес возврата из функции. Переполнение буфера где-то. Как понять можно где? |
08.12.2021, 17:17 | #4 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
А также выход за границы массива, неправильная адресная арифметика, ошибка в каком-то деструкторе, операторе копирования/перемещения, ...
Прогоните статическим анализатором или включите адрессанитайзер. |
08.12.2021, 17:20 | #5 |
Пользователь
Регистрация: 03.03.2018
Сообщений: 20
|
|
08.12.2021, 17:29 | #6 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
|
09.12.2021, 06:50 | #7 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
в неопределённом поведении
без кода сложно сказать, где именно. Сначала пройтись статическим анализатором на максималках (это может быть шокирующим приключением, однако) Если логами не ловится, значит тихо портится память, а стреляет в каком-нибудь деструкторе. Делаем новую ветку проекта в GIT, определяем, после какого действия появляется ошибка. Затем понемногу вырезаем функционал, пока ошибка не "пропадает". Последнее вырезанное - скорее всего примерная локализация бага Но довольно часто помогает просто запуск на отладку без точек останова - дебаггер умеет останавливаться на некоторых сомнительных манипуляциях с памятью |
09.12.2021, 09:28 | #8 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Обычно это неправильные указатели или выход индекса за границы массива.
Неправильные указатели в 90% связаны с утечкой памяти или Обращение к удаленному объекту. Выход за пределы массива проверяется, к примеру с использованием ключа https://codeforces.com/blog/entry/13875 Или статического анализатора кода https://pvs-studio.com/ru/blog/terms/0071/ Утечки памяти ловим как описано в статье: https://pro-prof.com/forums/topic/cpp_memory_leaks Так же для прочих проблем с указателями стоит овладеть динамическим анализатором кода Valgrind.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
При удалении класса происходит segmentation fault | gunsoy | Общие вопросы C/C++ | 24 | 19.08.2015 20:27 |
C++ vector segmentation fault | Misa | Помощь студентам | 4 | 08.01.2015 19:02 |
Segmentation fault | Hemul | Общие вопросы C/C++ | 7 | 16.08.2011 03:23 |
QT4 segmentation fault | jojahti | Qt и кроссплатформенное программирование С/С++ | 6 | 06.01.2010 09:57 |
GCL и segmentation fault. | jojahti | Свободное общение | 0 | 14.09.2009 19:20 |