|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Собрал в Debian Linux программу Bonzomatic из git-репозитария https://github.com/Gargaj/Bonzomatic Если ее запустить, переключиться на русскую раскладку, и нажать любую русскую букву, то произойдет сегфолт: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
В этой программе есть простейший тип: Код: plaintext 1.
И у класса LineLayout есть публичное свойство, в виде указателя на этот тип: Код: plaintext 1. 2. 3. 4. 5.
И вот с этим свойством в дебаггере творится лютая дичь: у него меняется тип. В конструкторе у этой переменной тип правильный, такой, какой объявлен в заголовке. А в деструкторе у этой же переменной тип становится "простым", то есть без указателя. Я специально сделал GIF-анимацию из двух скриншотов: Картинка с GIF-анимацией То есть, даже до сегфолта, если поставить брекпоинт в конструктор и деструктор, будет постоянно наблюдатся вот это странное изменени типа. Ну и дальше, сегфолт появляется на строчке: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Примечательно, что во время сегфолта, если просмотреть скоуп сегфолта, то у переменных chars, styles, lineStarts тип остается тем же, а у positions - слетает. Как это вообще возможно, я понять не могу. В общем, по всей видимости, происходит двойное высвобождение ресурса positions, но вот это вот странное изменение типа в строго типизированном языке, не дает возможности отследить что блин вообще происходит, и в какой момент происходит первое высвобождение. Поможите пофиксить этот баг. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 21:00 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Что за форма регистрации, Отладчик может глючить. Предлагаю сделать поиск по positions и поставить точки останова везде где написано delete positions. Возможно этот указатель не везде зануляется после освобождения. А если приложение многопоточное, то это вообще другой разговор. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 21:22 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Что за форма регистрации, Ещё конечно можно подумать, что где-то вы написали: Код: plaintext 1.
А в деструкторе у вас так: Код: plaintext 1.
Это вроде не по стандарту, но это фашизм, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 21:43 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Что за форма регистрацииПоможите пофиксить этот баг. valgrind тебе в руки, это явно порча памяти. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 22:02 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
petrav, во всем коде только два динамических создания массивов, в файле PositionCache.cxx: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
То бишь, создаются именно массивы. Видимо, какой-то странный выход за границу массива. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 22:53 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
попробуй собрать с -fno-strict-aliasing ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 03:17 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Двойное освобождение очень часто встречается, когда есть деструктор, освобождающий ресурсы, но нет или неверно реализован конструктор копирования (он должен создавать клоны ресурсов, а не просто копировать указатели, как происходит по умолчанию) ЗЫ. А то что отладчик какие-то там типы неправильно показывает это скорее всего баг самого отладчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 14:11 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Что за форма регистрации Код: plaintext 1.
Также посмотри по коду, как инициализируется переменная positions. Одно дело, когда Код: plaintext 1.
другое - инициализация указателем на локальную переменную, которая самоубилась при выходе из области видимости: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 15:50 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Что за форма регистрации, Это как вы так схимичили урл, что сам хост работает, а картинка ваша в блоке по федеральному закону? )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 17:58 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Непонятно зачем прятать ссылку скриншота за данным сайтом... Ничего не понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 18:07 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
А ты вообще смотришь скриншоты? Если человек не может скопипастить текст - то и на ксрине не будет ничего интересного по определению. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 18:09 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Ну дак сутки не смотрел))). Ну и надо читать газетысмотреть ссылки с новостями иногда. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 18:35 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, вот прямой URL, просто предыдущий форум, где я задавал такой же вопрос, не давал ввести длинные урлы, а я оттуда копипастил: https://i.piccy.info/i9/c3ec4ba1f5a8441bf45a677128f12cce/1624553843/359024/1433897/bonzomatic.gif ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 21:11 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Что за форма регистрации, Отгадка оказалась простой. А я был в недоумении)) Ну и непонятно, почему движок форума вдруг не глотал совсем недлинный урл? Гугл поиск подлиннее будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 22:05 |
|
Динамическое изменение типа переменной в конструкторе и деструкторе - как это возможно?
|
|||
---|---|---|---|
#18+
Что за форма регистрации, По теме ты согласен с профи выше что причина - некорректная работа с памятью? Ну и по сегфолту мое имхо что отладчик надо стопить до сегфолта. После него дичь может быть где угодно. Имхо. Зы. Используй умные указатели) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 22:10 |
|
|
start [/forum/topic.php?fid=57&msg=40080221&tid=2017198]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 188ms |
0 / 0 |