私はこの構造と動的に割り当てられた配列を持っています。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;
};
クラスがあり、構造体 Data にポインターの配列を作成し、char* の日付、通り、都市を動的に割り当てます。
ここで、これらのメモリ ブロックを削除する必要があります。さて、私はこれを試しました: (私のクラスのデストラクタ) 質問: 割り当てられたすべてのメモリを正しく解放するにはどうすればよいですか?
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;