cell
という名前のクラスを作成しました。このクラスの中にはcell
ポインタの配列があります。ヘッダーは次のようになります。C++でポインタの配列を削除するとデストラクタがクラッシュする
class cell
{
public:
cell();
cell *c[8];
void creatcells();
virtual ~cell();
..
}
とcpp
ファイルには、次のようになります。
cell::cell()
{
//ctor
for(int i=0;i<8;i++)
{
c[i]=NULL;
}
}
void cell::creatcells()
{
cell c1,c2,c3,c4,c5,c6,c7,c8;
c[0]=&c1;
c[1]=&c2;
c[2]=&c3;
c[3]=&c4;
c[4]=&c5;
c[5]=&c6;
c[6]=&c7;
c[7]=&c8;
}
cell::~cell()
{
for(int i=0; i<8; i++)
{
if (c[i]!=NULL)
{
delete c[i];
}
}
delete[] c;
}
しかし、プログラムが終了するたびに、それがなぜ、クラッシュ?
私はif (c[i]!=NULL)
なしで試しましたが、これは役に立ちません。 forループがなければ、コードは完全に終了しますが、これも削除する必要があることを私は知っています。 デストラクタを正しく書いたと思いますか?
デバッガを使用したプログラムを開くと、クラッシュポイント – user5821508
'セルc1、c2、c3、c4、c5、c6、c7、c8; '< - これらのすべてがメソッドの最後にスコープ外にあり、アドレスは無効です。 – crashmstr
変数 'c1'、' c2'などは、関数 'createcells'の範囲外に存在しません。したがって、それらへのポインタを格納することは、あなたにぶら下がっているポインタの配列を持たせることになります。 – CoryKramer