Russian Qt Forum

Qt => Общие вопросы => Тема начата: OS2 от Июль 26, 2016, 18:57



Название: Вылет по памяти при использовании динамической библиотеки (MSVC2015+Qt5.7.0).
Отправлено: OS2 от Июль 26, 2016, 18:57
Всем доброго времени суток.
Не могу разобраться в ситуации: имеется динамическая библиотека с несколькими экспортированными функциями.
Для подключения этой библиотеки использую QLibrary, затем через QLibrary::resolve получаю указатель на экспортируемую функцию.
Сама экспортируемая функция ничего не делает, кроме как создает и возвращает указатель на класс QDialog.
Диалог создается и отображается вполне корректно, НО: есть другая экспортируемая функция, которая  принимает на вход указатель на QDialog и пытается через delete разрушить этот объект.
Так вот, каждый раз когда это происходит, программа вылетает со следующей диагностикой:
Цитировать
HEAP CORRUPTION DETECTED: after Normal block (#3418) at 0x00D42708.
CRT detected that the application wrote to memory after end of heap buffer.
Причем этаже ошибка появляется, если я вместо явного удаления объекта через delete, вызову для него метод deleteLater().
Никак не могу понять, в чем моя ошибка, что я делаю не так? ??? Подскажите, кто знает...  ::)

Заранее всем спасибо!


Название: Re: Вылет по памяти при использовании динамической библиотеки (MSVC2015+Qt5.7.0).
Отправлено: Bepec от Июль 26, 2016, 20:58
А где код?
Что собственно обсуждать? :)


Название: Re: Вылет по памяти при использовании динамической библиотеки (MSVC2015+Qt5.7.0).
Отправлено: Alex Custov от Июль 26, 2016, 21:01
классика. Нарушение работы с памятью. Двойное удаление указателя, например. Когда ты пытаешься удалить объект диалога, а он уже удалён, например. Когда у него установлен флаг DestroyOnClose, например.


Название: Re: Вылет по памяти при использовании динамической библиотеки (MSVC2015+Qt5.7.0).
Отправлено: Igors от Июль 27, 2016, 10:19
НО: есть другая экспортируемая функция, которая  принимает на вход указатель на QDialog и пытается через delete разрушить этот объект.
Так вот, каждый раз когда это происходит, программа вылетает со следующей диагностикой:
Цитировать
HEAP CORRUPTION DETECTED: after Normal block (#3418) at 0x00D42708.
CRT detected that the application wrote to memory after end of heap buffer.
Причем этаже ошибка появляется, если я вместо явного удаления объекта через delete, вызову для него
Так кто же удаляет - Вы или экспортируемая функция? Нужен код


Название: Re: Вылет по памяти при использовании динамической библиотеки (MSVC2015+Qt5.7.0).
Отправлено: Racheengel от Июль 27, 2016, 11:50
Не удаляйте диалог, Qt сама его прихлоплет, когда "нада будет" :)