C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Массив указателей и освобождение памяти
Stan
Отправлено: 02.02.2005, 18:04


Не зарегистрирован







Вот такой код:
CODE

TPCThread  *PCThreads[20];
int PC_ThreadsRunning;

void __fastcall TfmMain::btStartClick(TObject *Sender) {
  PC_ThreadsRunning = 0;
  for(int i=0; i<20; i++) {
     PCThreads[i] = new TPCThread(i);
     PCThreads[i]->OnTerminate = PCThreadDone;
     PC_ThreadsRunning++;
  }
  btStart->Enabled = false;
  btCancel->SetFocus();
}
//---------------------------------------------------------------------

void __fastcall TfmMain::PCThreadDone(TObject * /*Sender*/) {
  PC_ThreadsRunning--;
  if (!PC_ThreadsRunning) {
    for(int i=0; i<20; i++)
      if (PCThreads[i]!=NULL) delete PCThreads[i];
    delete[] PCThreads;
    btStart->Enabled = true;
  }
}
//---------------------------------------------------------------------


Каждый раз в btStartClick массив указателей принимает новые значения по нарастающей +3Кб от последнего значения (т.е. PCThreads[0] во второй итерации = PCThreads[19] в первой итерации +3Кб). Получается, что память динамически распределенная
CODE
PCThreads[i] = new TPCThread(i);

не овобождается ни
CODE
if (PCThreads[i]!=NULL) delete PCThreads[i];
,
ни
CODE
delete[] PCThreads;
.
Пробовал и так, и сяк, и все вместе, и вообще без всего.
Результат всегда один и тот же.
В чем я не прав или что я не догоняю :?:
Gedeon
Отправлено: 02.02.2005, 19:10


Ветеран

Группа: Модератор
Сообщений: 1742



А
CODE

PCThreads[i]->FreeOnTerminate = true;

Не устраивает?

Вернуться в Вопросы программирования в C++Builder