Создаю структуру, отправляйю в поток, поток обрабатывает и взвращает ее.
При закрытии программы CodeGuru ругается на то что память не от-delete-ина.
Resource leak in process: Project1.exe(3372) - C:\Oleg\B_Sorces\SNMP\Tread\SNMP_rutine.h#734 The object array (0xF78E38) was never deleted
The object array (0xF78E38) was never deleted
The object array (0x00F78E38) [size: 16 bytes] was created with new[]
0x004078F1 - C:\Oleg\B_Sorces\SNMP\Tread\SNMP_rutine.h#734
0x7C80B683
Вопрос в том где и когда я должен ее убивать ?
Структура:
struct SNMP_IP_Table
{
AnsiString Host;
AnsiString Community;
int retries;
int timeout;
int Return_Status;
AnsiString Error_Description;
int Count;
AnsiString *AdEntAddr;
AnsiString *AdEntIfIndex;
AnsiString *AdEntNetMask;
};
Заполнение, запуск и отображение:
SNMP_IP_Table * IP_Table;
...
void __fastcall TForm1::Button8Click(TObject *Sender)
{
IP_Table = new SNMP_IP_Table;
IP_Table->Host = ComboBox1->Text;
IP_Table->Community = "public";
IP_Table->timeout = 1000;
IP_Table->retries = 1;
IP_Table_Thread=CreateThread(NULL,0,GetIP_Table,(LPVOID)IP_Table,0,&IP_Table_ThreadId);
ULONG IP_T;
do {
GetExitCodeThread(IP_Table_Thread, &IP_T);
Sleep(200);
Application->ProcessMessages();
if(IP_T != STILL_ACTIVE) Label1->Caption = "IP_Table_Thread - OK";
while (IP_T == STILL_ACTIVE);
TerminateThread(IP_Table_Thread, IP_Table_ThreadId);
IP_Table_Thread=NULL;
Memo1->Lines->Add("IP_Table");
for (int i = 0; i <= IP_Table->Count; i++)
{
Memo1->Lines->Add("");
Memo1->Lines->Add(IntToStr(i) + " Addr " + IP_Table->AdEntAddr[i]);
Memo1->Lines->Add(IntToStr(i) + " NetMask " + IP_Table->AdEntNetMask[i]);
Memo1->Lines->Add(IntToStr(i) + " IfIndex " + IP_Table->AdEntIfIndex[i]);
}
}
Поток:
unsigned long __stdcall GetIP_Table(void * par)
{
...
IP_Table->Count = VarDim;
IP_Table->AdEntAddr = new AnsiString[VarDim+1];
IP_Table->AdEntIfIndex = new AnsiString[VarDim+1];
IP_Table->AdEntNetMask = new AnsiString[VarDim+1];
...
}