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]; | ,
ни .
Пробовал и так, и сяк, и все вместе, и вообще без всего.
Результат всегда один и тот же.
В чем я не прав или что я не догоняю :?: |
|
Gedeon |
Отправлено: 02.02.2005, 19:10 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
А
CODE |
PCThreads[i]->FreeOnTerminate = true;
|
Не устраивает?
|
|
|