Название: Сегфолт в пустом деструкторе. Как исправить? Отправлено: xintrea от Сентябрь 28, 2015, 22:13 Обнаружил, что у меня при выходе из Qt-программы происходит сегфолт. Qt 5.4.2.
Наблюдения: * В обычной консоли при возникновении сегфолта пишется "Ошибка сегментирования". * В консоли Qt Creator (видимо туда попадает std err) пишется: Код: *** Error in `.../build-mytetra-Desktop_Qt_5_4_2_GCC_32bit-Debug/bin/mytetra': free(): invalid pointer: 0x09b462f4 *** * При отладке в Qt Creator сегфолт отлавливается, и выглядит на экране так: http://i.piccy.info/i9/2fb9d1908658739fc0330dabca52be62/1443465704/349211/825956/scr_371.png * Видно, что сегфолт происходит в пустом деструкторе, что для меня вообще непонятно. Вопрос: как побороть сию проблему? Код проекта: https://github.com/xintrea/mytetra_dev/tree/attachFiles Вопроизведение: запустить программу, при первом запуске программа спросит режим работы - выбрать portable, выйти из программы. Название: Re: Сегфолт в пустом деструкторе. Как исправить? Отправлено: Alex Custov от Сентябрь 28, 2015, 22:17 классика ошибок работы с памятью. Либо двойное удаление указателя, либо использование неинициализированного указателя.
Название: Re: Сегфолт в пустом деструкторе. Как исправить? Отправлено: xintrea от Сентябрь 28, 2015, 22:20 Все данные удаляемых объектов в стеке валидные.
После первого удаления объекта по указателю такое может быть? Название: Re: Сегфолт в пустом деструкторе. Как исправить? Отправлено: Bepec от Сентябрь 28, 2015, 22:39 Мб удаляешь объект, при этом имеющий родителя.
А на деле просто засунь туда вывод отладочный и посмотри сколько раз будет вызываться. Название: Re: Сегфолт в пустом деструкторе. Как исправить? Отправлено: xintrea от Сентябрь 28, 2015, 23:08 классика ошибок работы с памятью. Либо двойное удаление указателя, либо использование неинициализированного указателя. Дебаг показал двойное удаление объекта записи. Первый раз удаляется когда удаляется вся структура всех записей, второй раз удаляется, когда удаляется текущая запись, с которой происходит работа. Название: Re: Сегфолт в пустом деструкторе. Как исправить? Отправлено: kambala от Сентябрь 29, 2015, 00:32 обнуляй указатель после удаления. или используй умные указатели.
Название: Re: Сегфолт в пустом деструкторе. Как исправить? Отправлено: Old от Сентябрь 29, 2015, 03:57 Мб удаляешь объект, при этом имеющий родителя. Ну и что, это не приводит к повторному удалению.Название: Re: Сегфолт в пустом деструкторе. Как исправить? Отправлено: qate от Сентябрь 29, 2015, 08:56 без вызова setupDataFromDom падает ?
Название: Re: Сегфолт в пустом деструкторе. Как исправить? Отправлено: xintrea от Сентябрь 29, 2015, 10:30 без вызова setupDataFromDom падает ? Уже исправил. Проблема была в двойном удалении указателя. Я в приступе перфекционизма стал прописывать в деструкторах удаление всех указателей, расположенных в интерфейсе, забыв что если в интерфейсе есть указатель, это не значит что память выделяется именно в этом классе. Название: Re: Сегфолт в пустом деструкторе. Как исправить? Отправлено: Old от Сентябрь 29, 2015, 10:42 Уже исправил. Проблема была в двойном удалении указателя. Я в приступе перфекционизма стал прописывать в деструкторах удаление всех указателей, расположенных в интерфейсе, забыв что если в интерфейсе есть указатель, это не значит что память выделяется именно в этом классе. Умные указатели подпрыгивают с поднятой рукой... :) |