LINUX.ORG.RU

Сегфолт в пустом деструкторе. Как исправить?

 , ,


0

1

Обнаружил, что у меня при выходе из 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/825...

* Видно, что сегфолт происходит в пустом деструкторе, что для меня вообще непонятно.


Вопрос: как побороть сию проблему?

Код проекта: https://github.com/xintrea/mytetra_dev/tree/attachFiles

Вопроизведение: запустить программу, при первом запуске программа спросит режим работы - выбрать portable, выйти из программы.

★★★★★

Ответ на: комментарий от hizel

Да не кривой указатель. В стеке все данные валидные, у table можно посмотреть все свойства, они актуальные и правильные.

Xintrea ★★★★★
() автор топика

Пробовал поставить точку останова в этот деструктор и посмотреть, не вызывается ли он дважды?

jeuta ★★★★
()
Ответ на: комментарий от Xintrea

Ну тыкни код. Желательно всю цепочку от начала удаления.

staseg ★★★★★
()

Пальцем в небо - из за перекрестной ссылки на родителя relatedAttachTableModel в AttachTableData. Попробуй static_cast<AttachTableModel *>(parent()) (или динамический каст с отловом исключения) вместо дополнительного свойства.

PS в файле src/libraries/qtSingleApplication5/qtlocalpeer.cpp сделай #include <QDataStream>, с новыми версиями qt сборка фейлится.

arcanis ★★★★
()
Ответ на: комментарий от arcanis

аа, у тебя не qobject. Ну тогда хз :) но комментирование delete table спасает от сегфолта - смотри деструкторы AttachTableData и AttachTableModel, включая неявные какие то вещи.

arcanis ★★★★
()
Последнее исправление: arcanis (всего исправлений: 2)

а если деструктор убрать из кода? а если собрать шлангом?

catpcha: lipred shall

anonymous
()

Пустой виртуальный деструктор ЕМНИП.

KblCb ★★★★★
()
Ответ на: комментарий от arcanis

аа, у тебя не qobject. Ну тогда хз :) но комментирование delete table спасает от сегфолта - смотри деструкторы AttachTableData и AttachTableModel, включая неявные какие то вещи.

Щас отдебажился, похоже у меня повторное удаление объекта.

Первый раз объект удаляется, когда удаляется структура ВСЕХ записей, второй раз удаляется, когда удаляется текущий объект с которым происходит работа.

Думаю как исправить.

Xintrea ★★★★★
() автор топика

Table уже уничтожен до тебя.

anonymous
()

Лень смотреть твоё поделие, но, скорее всего, у тебя оно отнаследованно от QObject, а проинициализировать родительский обьект ты забыл.

Вообще посмотри под отладчиком где падает - будь мужыком.

pon4ik ★★★★★
()

неосиляторов переписи тред

падает на повторном вызове деструктора

anonymous
()
Ответ на: комментарий от anonymous

Такое ощущение, что это единственный способ писать на нем, если ты не гений, конечно.

loz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.