我有這種結構和動態分配的數組。 我不能使用std :: vector和std :: string,因爲它是作業。結構體中指針數組的析構函數
struct Moves
{
const char* date;
const char* street;
const char* city;
};
struct Data
{
const char* id;
const char* name;
const char* surname;
int count;
Moves** moves;
};
我有一個類,其中I創建結構數據,其中I動態地分配字符*日期,街道,城市指針的陣列。
現在,我需要刪除這些內存塊。 嗯,我已經試過這個:(我的類的析構函數) 問題是:我應該如何正確釋放所有分配的內存?
class Reg
{
private:
Data** arr;
int counter;
public:
Reg(){ arr=new Data*[1000]; }
~Reg();
... other methods
};
Reg::~Reg()
{
for(int i=0;i<counter;i++)
{
for(int c=0;c<arr[i]->count;c++)
{
delete arr[i]->moves;
}
delete arr[i];
}
delete [] arr;
}
下面是分配的一個例子:
arr[counter]=new Data;
arr[counter]->id=new char[12];
arr[counter]->id=id;
arr[counter]->name=new char[strlen(name)+1];
arr[counter]->name=name;
arr[counter]->surname=new char[strlen(surname)+1];
arr[counter]->surname=surname;
arr[counter]->moves=new Moves*[100];
arr[counter]->moves[0]=new TMoves;
arr[counter]->moves[0]->city=new char[strlen(city)+1];
arr[counter]->moves[0]->city=city;
arr[counter]->moves[0]->date=new char[strlen(date)+1];
arr[counter]->moves[0]->date=date;
arr[counter]->moves[0]->street=new char[strlen(street)+1];
arr[counter]->moves[0]->street=street;
問題是什麼? – 2013-04-10 23:12:30
arr是int嗎?不是int數組? – taocp 2013-04-10 23:12:49
給每個結構自己的析構函數('Data()','〜Moves')並讓他們自己照顧會更好。 – Beta 2013-04-10 23:15:10