Название: QSqlQuery и освобождение памяти Отправлено: OKTA от Май 22, 2012, 10:57 Товарищи! Приветствую! Подскажите!
Использую запросы через указатели. Запросы проходят как надо, но забивают память! Как надо о них избавляться, чтобы память освобождалась, когда query и его данные мне не нужны? Название: Re: QSqlQuery и освобождение памяти Отправлено: LisandreL от Май 22, 2012, 11:04 delete query; // в том месте, где запрос становится ненужен
Ну это так, не видя код. Название: Re: QSqlQuery и освобождение памяти Отправлено: OKTA от Май 22, 2012, 11:27 Вот такая штука присутствует в одном классе.
Код: QSQ *uDataBase::query(const QString &sql, bool inMainDB){ Возвращается в другой класс она посредством Код: QSQ *query(const QString& sql, bool inMainDB = false){ ну и используется примерно вот так в основном теле: Код: QSQ *query = query("SELECT * FROM tablename WHERE ident = '28' "); delete query не помогает, не помогают и finish И clear =( Название: Re: QSqlQuery и освобождение памяти Отправлено: sidsukana от Май 22, 2012, 11:45 delete query не помогает Не может такого быть, значит не запросы забивают память. Название: Re: QSqlQuery и освобождение памяти Отправлено: DmitryM от Май 22, 2012, 12:00 delete query не помогает Не может такого быть, значит не запросы забивают память. Если внимательно читать асситент по работе с БД, то можно увидеть Цитировать Warning: There should be no open queries on the database connection when this function is called, otherwise a resource leak will occur. Название: Re: QSqlQuery и освобождение памяти Отправлено: OKTA от Май 22, 2012, 12:04 Только проблема, что с delete, что без delete утечка идет))) А, и при закрытии проги вылетает в вывод : LEAK: 481 Structure - без понятия что это и откуда)
Название: Re: QSqlQuery и освобождение памяти Отправлено: DmitryM от Май 22, 2012, 12:07 Только проблема, что с delete, что без delete утечка идет))) А, и при закрытии проги вылетает в вывод : LEAK: 481 Structure - без понятия что это и откуда) создавай запросы в стеке и не будет утечек.Название: Re: QSqlQuery и освобождение памяти Отправлено: OKTA от Май 22, 2012, 12:09 А можно поподробнее чуть-чуть для тех, кто медленно догоняет?))
Название: Re: QSqlQuery и освобождение памяти Отправлено: Kurles от Май 22, 2012, 12:31 я для получения QSqlQuery нужного мне соединения использовал бы такой код:
Код использование: Код
Название: Re: QSqlQuery и освобождение памяти Отправлено: OKTA от Май 22, 2012, 12:36 явное удаление сразу после exec ни к чему не приводит!
Название: Re: QSqlQuery и освобождение памяти Отправлено: Kurles от Май 22, 2012, 12:46 явное удаление сразу после exec ни к чему не приводит! Цитировать Минимальный проект воспроизводящий баг в аттаче повышает шансы на быстрый ответ. Базу sqlite использовать для простоты в этом проекте.Название: Re: QSqlQuery и освобождение памяти Отправлено: DmitryM от Май 22, 2012, 13:03 А можно поподробнее чуть-чуть для тех, кто медленно догоняет?)) не использовать new Название: Re: QSqlQuery и освобождение памяти Отправлено: OKTA от Май 22, 2012, 14:35 Да! Спасибо! Проблемы была как раз в new!) Немножко переделал - создаю в классе приватный QSqlQuery, в ф-ии в него кидаю выполненный запрос и возвращаю адрес!
Название: Re: QSqlQuery и освобождение памяти Отправлено: Kurles от Май 22, 2012, 14:40 Да! Спасибо! Проблемы была как раз в new!) Немножко переделал - создаю в классе приватный QSqlQuery, в ф-ии в него кидаю выполненный запрос и возвращаю адрес! А он тебе ворнинги в консоль не кидает, когда ты класс уничтожаешь, в котором находиться этот самый приватный QSqlQuery? Название: Re: QSqlQuery и освобождение памяти Отправлено: OKTA от Май 22, 2012, 15:38 Ворнингов нет! Забавно то, что теперь все работает как надо, но сыпется миллион QSqlQuery::value: not positioned on a valid record))
Название: Re: QSqlQuery и освобождение памяти Отправлено: OKTA от Май 22, 2012, 15:56 А нет, не все ок.. ВИдимо из-за неправильно позиционирования теряются данные.
Название: Re: QSqlQuery и освобождение памяти Отправлено: OKTA от Май 22, 2012, 17:19 Завязал с ссылками - сделал без них. Все ок
|