realloc при release сборке |
Здравствуйте, гость ( Вход | Регистрация )
realloc при release сборке |
KuvshinoF |
23.3.2021, 13:31
Сообщение
#1
|
Студент Группа: Участник Сообщений: 74 Регистрация: 25.7.2013 Пользователь №: 3887 Спасибо сказали: 0 раз(а) Репутация: 0 |
при release сборке (CONFIG+=release в pro-файле) программа сразу при запуске падает с realloc(): invalid pointer: 0x0000...debug-сборка данной программы работает отлично. В чем тут дело и как исправить? (причем в этом проекте нельзя вручную изменить конфигурацию сборки на выпуск (только отладка), вновь созданный чистый проект работает в release нормально и есть ручной выбор конфигурации сборки)
|
|
|
Iron Bug |
23.3.2021, 17:30
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
обнули указатель перед использованием. некоторые компиляторы их не обнуляют. собственно, по стандарту они и не обязаны.
|
|
|
KuvshinoF |
23.3.2021, 21:36
Сообщение
#3
|
Студент Группа: Участник Сообщений: 74 Регистрация: 25.7.2013 Пользователь №: 3887 Спасибо сказали: 0 раз(а) Репутация: 0 |
Понятно...да, может какой-то указатель и не обнулен. А почему в debug-версии это проходит (все работает норм)?
|
|
|
Iron Bug |
24.3.2021, 6:46
Сообщение
#4
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
скорее всего, в дебаге память может обнуляться для проверок. но в дебаге ещё и распределение адресов другое. может, просто повезло с мусором в памяти и он там нулевой
|
|
|
Алексей1153 |
24.3.2021, 6:53
Сообщение
#5
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
KuvshinoF |
25.3.2021, 8:25
Сообщение
#6
|
Студент Группа: Участник Сообщений: 74 Регистрация: 25.7.2013 Пользователь №: 3887 Спасибо сказали: 0 раз(а) Репутация: 0 |
Да, но новый, "чистый" проект с указателем QWidget * mywidget; в качестве члена QMainwindow и без обнуления отлично работает в release-сборке.
|
|
|
Iron Bug |
25.3.2021, 14:45
Сообщение
#7
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
смотря как ты используешь этот указатель.
хотя надо заметить, что в многопоточных приложениях иногда падение в каком-то месте ещё не означает, что именно этот оператор его вызвал. там надо смотреть контексты потоков. может быть где-то порушен стек или ещё что-то, что затирает другие данные. |
|
|
KuvshinoF |
25.3.2021, 15:12
Сообщение
#8
|
Студент Группа: Участник Сообщений: 74 Регистрация: 25.7.2013 Пользователь №: 3887 Спасибо сказали: 0 раз(а) Репутация: 0 |
Понятно. То есть дело точно в начальном необнулении укателя(ей)?
|
|
|
Алексей1153 |
25.3.2021, 18:24
Сообщение
#9
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
KuvshinoF, инициализация должна быть, иначе будут сюрпризы. Но дело может быть не только в этом.
Мы же не знаем, что ты там делаешь с указателями |
|
|
KuvshinoF |
1.4.2021, 10:09
Сообщение
#10
|
Студент Группа: Участник Сообщений: 74 Регистрация: 25.7.2013 Пользователь №: 3887 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вроде все указатели в конструкторах занулил, но эффекта это не возымело. А можно как-то локализовать эту ошибку (узнать место программы, из-за которого возникает этот realloc: invalid pointer)?
|
|
|
Текстовая версия | Сейчас: 25.11.2024, 9:52 |