Утечка памяти (C++ Builder 2006)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Meecript_, 28 Feb 2010.

  1. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    При работе программы постоянно увеличивается объем используемой памяти. Происходит это очень медленно, но все же где-то есть утечка. Не могу понять в чем проблема. Ниже код потока. Там где код1 и код2 нет никаких объявлений переменных, только использование методов класса AnsiString :):pos(), ::Delete(), ::SubString()) и несколько циклов while();

    Code:
    unsigned long __stdcall work_thr(void*)
    {
    	FILE* fSave;
    	AnsiString sFormat = "file001";
    	AnsiString sData = "";
    	int iCount = 1000;
    
    	while(!bComplete)
    	{
    		//тут код1
    		
    		for(int j = 0; j < iCount; ++j)
    		{
    			//тут код2
    			
    			fSave = fopen((sFormat + ".txt").c_str(), "a");
    			if(fSave)
    			{
    				fputs((sData + "\n").c_str(), fSave);
    				fclose(fSave);
    			}
    		}
    	}
    	return 0;
    }
    
    В чем может быть проблема?
     
  2. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Если поток создается с помощью CreateThread, то вместо return 0 надо бы использовать ExitThread(0).
     
  3. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Утечка в цикле while(!bComplete), используемая память увеличивается во время работы, когда все потоки активны.
    Но все равно спасибо, поправлю это.
     
  4. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    попробуй обойтись без AnsiString
     
  5. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    А ты на все 100% уверен что тут вообще есть утечка?
    Я к тому, что когда-то тоже так в ДЗ винды смотрел думал есть утечка в прграмме.
    Потом установил тулзу встраивающуюся в код, погонял прогу с нею - утечек не нашлось.
    При этом для теста тут же написал код с утечкой - успешно детектировала.
    Вообще в ДЗ не так то просто детектировать memory leaks, там не все так очевидно как кажется на первый взгляд.
     
  6. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Прогони через valgrind и увидишь в каком месте утечка, да лучше std строки юзать.
     
  7. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    зачем?
     
  8. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    ога d_x Рихтер пишет
     
    _________________________
  9. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Ну что ТС, нашел утечку?

    ЗЫ Это не флуд, реально интересно