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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: memory leak в qt примерах  (Прочитано 6373 раз)
ildar
Гость
« : Сентябрь 11, 2009, 12:29 »

Qt 4.5.1, при запуске любого примера, valgrind выявляет утечку памяти

в чем может быть причина?

например для valgrind ./simpletextviewer генерится такой лог:

Код:
==19694== ERROR SUMMARY: 13 errors from 4 contexts (suppressed: 418 from 3)
==19694== malloc/free: in use at exit: 142,822 bytes in 3,235 blocks.
==19694== malloc/free: 32,873 allocs, 29,638 frees, 5,041,373 bytes allocated.
==19694== For counts of detected errors, rerun with: -v
==19694== Use --track-origins=yes to see where uninitialised values come from
==19694== searching for pointers to 3,235 not-freed blocks.
==19694== checked 522,224 bytes.
==19694==
==19694== LEAK SUMMARY:
==19694==    definitely lost: 292 bytes in 11 blocks.
==19694==      possibly lost: 0 bytes in 0 blocks.
==19694==    still reachable: 142,530 bytes in 3,224 blocks.
==19694==         suppressed: 0 bytes in 0 blocks.
Записан
Rcus
Гость
« Ответ #1 : Сентябрь 11, 2009, 12:52 »

--leak-check=full подскажет
Записан
whirlwind
Гость
« Ответ #2 : Сентябрь 11, 2009, 16:06 »

всегда так. Типа Qt использует настолько продвинутые механизмы управления памятью, что профайлеры их не понимают.
Записан
ildar
Гость
« Ответ #3 : Сентябрь 11, 2009, 16:23 »

whirlwind, спасибо за ответ

Rcus, а у вас valgrind не показывает утечек памяти в примерах?
Записан
Rcus
Гость
« Ответ #4 : Сентябрь 11, 2009, 16:27 »

Код:
main@krchome:/media/whole/svn_clear_kmldonkey/build$ /usr/bin/qmake -v
QMake version 2.01a
Using Qt version 4.5.2 in /usr/lib
Нет, и в рабочих приложениях тоже нет.
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #5 : Сентябрь 28, 2009, 06:45 »

Где-то слышал что троли не считают за учечку памяти, если для объекта вызывается new один раз за все время работы программы и при этом не вызывается delete. Например из их учебника "Qt4: программирование GUI на С++" первый пример
Код:
int main(...)
{

}
Записан
ildar
Гость
« Ответ #6 : Сентябрь 28, 2009, 09:47 »

Цитировать
For simplicity, we don't bother calling delete on the QLabel object at the end of the main() function. This memory leak is harmless in such a small program, since the memory will be reclaimed by the operating system when the program terminates.
Записан
shadone
Гость
« Ответ #7 : Сентябрь 28, 2009, 11:00 »

всегда так. Типа Qt использует настолько продвинутые механизмы управления памятью, что профайлеры их не понимают.
ничего "настолько продвинутого" в Qt нет, если valgring показывает утечку, то скорее всего так и есть. Но к сожалению большая часть утечек которые он показывает не в Qt, где их легко исправить, а в сторонних библиотеках - libX11, libc и т.п.
Записан
ildar
Гость
« Ответ #8 : Сентябрь 28, 2009, 11:18 »

а есть возможность отфильтровать как-нибудь эти утечки в "libX11, libc и т.п.", чтобы проверять свой код на предмет течи?
Записан
shadone
Гость
« Ответ #9 : Сентябрь 28, 2009, 11:44 »

а есть возможность отфильтровать как-нибудь эти утечки в "libX11, libc и т.п.", чтобы проверять свой код на предмет течи?
да, у valgrind есть опция --gen-supperssions для генерация файла подавления ошибок и --suppressions для использования сгенерированного файла.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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