Допустим есть одна программа написанная на С++ Builder из BDS2006.По сути там одна форма и с одной кнопкой.Кнопка вызывает ф-цию обьявленную примерно так char *function(void) .Внутри этой ф-ции в куче через оператор new выделяются 3 переменные ,каждая по килобайту.Ну и после return делается delete для каждой переменной.Проблема в том что после каждого нажатия кнопки.Обьем памяти который занимает програма растет на 4 килобайта Можно как то с этой утечкой расправится?
Может лучьше использовать переменны? они после выхода из функции удаляются. Код после return; не выполняется! Попробуй создать деструктор и в нем удалить ссылки. ps месяц без С++ и все забыл.
Нипонял.Какие такие переменные?Если стековые,то я в стековой памяти нехочу слишком много хранить данных.Одно дело если буфер в несколько килобайт.Другое если в несколько мегабайт.Стека нехватит.А в куче память всеравно почему то будет течь
Code: char* lsds() { char buff[1024]; char *buf=new char[1024]; char *buf1=new char[1024]; char *buf2=new char[1024];memset(buf2,NULL,1024); struct { UINT type; LPCSTR name; } DTF [] = { { DRIVE_UNKNOWN, " Unknown\n" }, { DRIVE_NO_ROOT_DIR, " Invalid path\n" }, { DRIVE_REMOVABLE, " Removable\n" }, { DRIVE_FIXED, " Fixed\n" }, { DRIVE_REMOTE, " Network drive\n" }, { DRIVE_CDROM, " CD-ROM\n" }, { DRIVE_RAMDISK, " RAM disk\n" }, { 0, NULL}, }; GetLogicalDriveStrings(sizeof(buff)/sizeof(char),buff); for(int i=0; i<1024-1; i++) if( buff[i]==0) { if(buff[i+1] != 0) buff[i] =(char) 0x20; else break; }strcpy(buf,buff); for(;;) { strncpy(buf1,buf,3);buf+=4; strcat(buf2,buf1);strcat(buf2,DTF[GetDriveType(buf1)].name); if(strlen(buf)==0){break;} } return(buf2); } В кнопке Code: ShowMessage(lsds()); С каждым нажатием на которую.Количество памяти занимаемое прогой увеличивается на 4 килобайта.А я почему то думал что после завершение работы ф-ции все её внутренние переменные полностью вычищяются из памяти.