Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Утечка памяти


Автор: Ak47black 18.11.2007, 22:49
Здравствуйте.
Я хотел-бы узнать как бороться с утечкой памяти.
Я наблюдаю у себя очень медленную утечку памяти. Если смотреть с procexp то надо 10 мин чтобы хоть чтото заметить. Код большой.
Подскажите как лучше всего с этим бороться, с чего мне стоит начать анализ, какими програми вы пользуетесь ? 

Автор: OdesitVadim 18.11.2007, 23:23
для начала можно поставить fastmm и в его inc файле выставить полный отчет (раскомментировав соотвествующую директиву).
после этого при закрытии программы будет выдаваться лог, кто создался и не удалился или дважды удалялся.

Автор: aktuba 19.11.2007, 00:36
Цитата(Ak47black @  18.11.2007,  23:49 Найти цитируемый пост)
Подскажите как лучше всего с этим бороться, с чего мне стоит начать анализ, какими програми вы пользуетесь ?  

Найти место, где происходит утечка. Так с ходу трудно что-то советовать...

Автор: ama_kid 19.11.2007, 11:16
Цитата(Ak47black @  18.11.2007,  22:49 Найти цитируемый пост)
Подскажите как лучше всего с этим бороться, с чего мне стоит начать анализ, какими програми вы пользуетесь ?
модуль MemCheck выдает неплохо сформированную информацию о стеке вызовов, приведших с мемори-лику... по крайней мере сузить область поисков до одной-двух функций может гарантированно...


Автор: Ak47black 19.11.2007, 14:28
Так попробовал я MemCheck и вижу такой вот страшный-непонятный stack например
Код

TOP 10 Leaks: begin
Leak #0 User allocated memory (GetMem)
    Size: 40
    1 Occurence
    call stack - 0 : (no debug info) Find error: 010853DC
    call stack - 1 : Module Unit1.pas Routine @Unit1@TMainForm@ServerSocketClientConnect Line 845 Find error: 004DBD4D
    call stack - 2 : Module ScktComp.pas Routine @Scktcomp@TServerWinSocket@ClientConnect Line 1558 Find error: 0048FF27
    call stack - 3 : Module ScktComp.pas Routine @Scktcomp@TServerWinSocket@ClientEvent Line 1326 Find error: 0048F888
    call stack - 4 : Module ScktComp.pas Routine @Scktcomp@TCustomWinSocket@Event Line 980 Find error: 0048ECF9
    call stack - 5 : Module ScktComp.pas Routine @Scktcomp@TServerClientWinSocket@Create Line 1242 Find error: 0048F55F
    call stack - 6 : Module ScktComp.pas Routine @Scktcomp@TServerWinSocket@GetClientSocket Line 1501 Find error: 0048FDA4
    call stack - 7 : Module ScktComp.pas Routine @Scktcomp@TServerWinSocket@Accept Line 1400 Find error: 0048F9D1
    call stack - 8 : Module ScktComp.pas Routine @Scktcomp@TCustomWinSocket@CMSocketMessage Line 680 Find error: 0048E506
    call stack - 9 : Module ScktComp.pas Routine @Scktcomp@TCustomWinSocket@WndProc Line 1162 Find error: 0048F28C
    call stack - 10 : Module classes.pas Routine @Classes@StdWndProc Line 10965 Find error: 004297CA
    call stack - 11 : (no debug info) Find error: 7E418730
    call stack - 12 : (no debug info) Find error: 7E418812
    call stack - 13 : (no debug info) Find error: 7E4189C9
    call stack - 14 : (no debug info) Find error: 7E4196C3
    call stack - 15 : Module Forms.pas Routine @Forms@TApplication@ProcessMessage Line 6872 Find error: 0048B545
    call stack - 16 : Module Forms.pas Routine @Forms@TApplication@HandleMessage Line 6891 Find error: 0048B58C
    call stack - 17 : Module Forms.pas Routine @Forms@TApplication@Run Line 6975 Find error: 0048B827
    call stack - 18 : Module Project.dpr Routine initialization Line 38 Find error: 004E1AD5
    call stack - 19 : (no debug info) Find error: 7C816FD3
    call stack - 20 : (no debug info) Find error: FFFFFFFC

Кто-нибудь может из вышеприведенного сказать, где мне эту утечку искать?

Добавлено @ 14:29
7C816FD3 это гдето в windows dll искать надо как я вижу?  smile 

Автор: OdesitVadim 19.11.2007, 17:09
здесь call stack - 1 : Module Unit1.pas Routine @Unit1@TMainForm@ServerSocketClientConnect Line 845 Find error: 004DBD4D

Автор: Ak47black 19.11.2007, 20:15
Ок. Буду смотреть дальше, спасибо всем кто участвовал.

Автор: Akella 21.11.2007, 10:33
Вот ещё проверка утечек памяти
Код

  ReportMemoryLeaksOnShutdown := DebugHook <> 0;

вставь в создании главной формы

Может ты создаёшь чего, например TStringList, но не уничтодаешь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)