Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Где утечка памяти?

841
06 апреля 2009 года
_nic
199 / / 29.07.2006
Ради интереса такой вот код
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
hh=HeapCreate(0,0x01000,0);
if(hh==NULL){MessageBox(0,"!","!",MB_OK);}
}
..........................................................................
void __fastcall TForm1::Button3Click(TObject *Sender)
{
char *buf=(char*)HeapAlloc(hh,0,1024*1024);
if(buf==NULL){MessageBox(0,"!","!",MB_OK);}
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjvbsakjbvkjslb");
MessageBox(Form1->Handle,buf,"!",MB_OK);
HeapFree(hh,0,buf);
}

С каждым нажатием кнопки отоборажаемое количество занимаемой памяти программой в диспетчере задач увеличивается на 4 килобайта.
Ради интереса вопрос:Где течет?
479
07 апреля 2009 года
Ухух
142 / / 05.05.2006
Цитата: _nic
С каждым нажатием кнопки отоборажаемое количество занимаемой памяти программой в диспетчере задач увеличивается на 4 килобайта.
Ради интереса вопрос:Где течет?


Ну так отрываем лапки у таракана и ищем орган слуха. Ремарим все в событии кнопки и смотрим. Разремарим мессагу (тока там без буфера что то пропишем просто строкой ) и смотрим. Ну и так далее.

11K
07 апреля 2009 года
Babandr
76 / / 05.05.2008
А почему значения флага (второй параметр в ф-ях HeapAlloc и HeapFree) - нули?
Я глянул в winnt.h - там вроде у разрешенных параметров ненулевые значения...может, в этом дело?
1
07 апреля 2009 года
kot_
7.3K / / 20.01.2000
Скорей всего правильный ответ - нигде.
Дело в том что не всегда память из кучи возвращается в ОС, во вторых - мониторить при помощи ДЗ можно только явные (и большие) утечки памяти. А наблюдаемый вами эффект - следствие прерисовки окна и т.п.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог