2次元配列を動的に割り当てようとしていて、使用後に削除しようとしています。コードは次のようになります。削除時のアクセス違反メッセージ動的に作成された2次元配列
func(char* pszError)
{
//Initialize
char ** ptr = new char*[1];
// Some copying stuff in ptr[0]
ptr[0] = new char[strlen(psError) + 1];
strcpy(ptr[0], strlen(pszError) + 1, pszError);
delete[] ptr[0];
delete[] ptr;
return;
}
これは私には無害で、エラーが発生してはいけません。しかし、ポイントdelete[] ptr;
で私はアクセス違反を投げる。
誰でも助けてくれますか?私はこれで十分な頭を叩いた。
エラーは、 "いくつかのコピーのもの" です。おそらく、割り当てられたスペースの外側に書き込みます。 –
'std :: vector'またはBoost.MultiArrayを使用してください。 –
このコードの部分は正しいです。 「ptr [0]の一部をコピーしています」で何が起こっていますか?多分、あなたは(a)ptr [0] [b]の値を明示的に変更していて、誤ってptr [0] []の境界を越えてptr [0]の値を暗黙的に変更しているかもしれません。 (これらの2つの配列は、ヒープ上にお互いに「座っている」可能性が高いでしょう)。 – CygnusX1