newによる多次元配列の開放について
Posted: 2010年10月08日(金) 02:57
こんばんは いつもお世話になっています。
今回、以下のようなコードをプログラムの一部で組んでいます。
CHAR** BUF_STRING_A;
INT CREATE_STRING(VOID)
{
BUF_STRING_A = new CHAR*[ LINE_NUM ];//1次元での確保
for( int i = 0; i <= LINE_NUM; i ++ )
{
BUF_STRING_A = new CHAR[ STRING_NUM ];//各ポインタに2次元分の確保
}
return 0;
}
INT DELETE_STRING(VOID)
{
for( int i = 0; i <= this->LINE_NUM; i ++ )
{
if( this->BUF_STRING_A == NULL ) continue;
delete this->BUF_STRING_A;
this->BUF_STRING_A = NULL;
}
if( this->BUF_STRING_A != NULL )
{
delete this->BUF_STRING_A;
this->BUF_STRING_A = NULL;
}
}
その中で最後から4行目の
delete this->BUF_STRING_A;で
「Windows によって Project.exe でブレークポイントが発生しました。
ヒープが壊れていることが原因として考えられます。Project.exe または読み込まれた DLL にバグがあります。
あるいは、Project.exe がフォーカスを持っているときに、ユーザーが F12 キーを押したことが原因として考えられます。
可能であれば、出力ウィンドウに詳細な診断情報が表示されます。」
というエラーがでます。
調べたところ、開放済みなどのポインタを再度deleteするなどをすると起きると書かれていたのですが
配列 CHAR* BUF_STRING_A の開放をしたあと大元であるCHAR** BUF_STRING_A自体の開放はしなくてもよいのでしょうか??
分かりにくい文ですが、よろしくお願いいたします。
今回、以下のようなコードをプログラムの一部で組んでいます。
CHAR** BUF_STRING_A;
INT CREATE_STRING(VOID)
{
BUF_STRING_A = new CHAR*[ LINE_NUM ];//1次元での確保
for( int i = 0; i <= LINE_NUM; i ++ )
{
BUF_STRING_A = new CHAR[ STRING_NUM ];//各ポインタに2次元分の確保
}
return 0;
}
INT DELETE_STRING(VOID)
{
for( int i = 0; i <= this->LINE_NUM; i ++ )
{
if( this->BUF_STRING_A == NULL ) continue;
delete this->BUF_STRING_A;
this->BUF_STRING_A = NULL;
}
if( this->BUF_STRING_A != NULL )
{
delete this->BUF_STRING_A;
this->BUF_STRING_A = NULL;
}
}
その中で最後から4行目の
delete this->BUF_STRING_A;で
「Windows によって Project.exe でブレークポイントが発生しました。
ヒープが壊れていることが原因として考えられます。Project.exe または読み込まれた DLL にバグがあります。
あるいは、Project.exe がフォーカスを持っているときに、ユーザーが F12 キーを押したことが原因として考えられます。
可能であれば、出力ウィンドウに詳細な診断情報が表示されます。」
というエラーがでます。
調べたところ、開放済みなどのポインタを再度deleteするなどをすると起きると書かれていたのですが
配列 CHAR* BUF_STRING_A の開放をしたあと大元であるCHAR** BUF_STRING_A自体の開放はしなくてもよいのでしょうか??
分かりにくい文ですが、よろしくお願いいたします。