Russian Qt Forum
Ноябрь 22, 2024, 23:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вылет по памяти при использовании динамической библиотеки (MSVC2015+Qt5.7.0).  (Прочитано 4251 раз)
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« : Июль 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().
Никак не могу понять, в чем моя ошибка, что я делаю не так? Непонимающий Подскажите, кто знает...  Строит глазки

Заранее всем спасибо!
Записан
Bepec
Гость
« Ответ #1 : Июль 26, 2016, 20:58 »

А где код?
Что собственно обсуждать? Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Июль 26, 2016, 21:01 »

классика. Нарушение работы с памятью. Двойное удаление указателя, например. Когда ты пытаешься удалить объект диалога, а он уже удалён, например. Когда у него установлен флаг DestroyOnClose, например.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июль 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, вызову для него
Так кто же удаляет - Вы или экспортируемая функция? Нужен код
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Июль 27, 2016, 11:50 »

Не удаляйте диалог, Qt сама его прихлоплет, когда "нада будет" Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.118 секунд. Запросов: 22.