配列がいっぱいになると文字列を文字列に格納するC++プログラムを作成しています。以下のコードを使用して、より多くの項目のスペースを確保するために配列のサイズを変更します。しかし時には(必ずしもそうではない)「delete [] temp;」でクラッシュすることがありますなぜ私はそれを修正する方法を知らない。助けてください。C++ delete []クラッシュ
私は多くを検索しましたが、どこでも答えを見つけることができませんでした。私はそれをデバッグするとき "無効なポインタ"と言うが、私は前にデータを格納し、まだそれを解放していないときに無効にすることができますか?
これは私のコードです:
if(item_cnt >= (arr_size - 1))
{
int oldsize = arr_size;
string * temp;
arr_size *= 2;
temp = arr;
arr = new string [arr_size];
memcpy(arr, temp, oldsize * sizeof(temp));
delete[] temp;
}
スタイルのいくつかの点: 'memcpy'ではなく' std :: copy'を使うべきです。また、手動でのメモリ管理( 'new'、' delete'など)を行うべきではないので、コンテナクラスを使ってこれをすべて自動的に処理する必要があります。 –
'memcpy(arr、temp、oldsize * sizeof(temp));' - それは 'sizeof(* temp)'ではいけませんか? (もちろん、memcpyは最初から間違っています) –
これは悪い...文字列にmemcpyを使わないでください。 'string myString(toBeCopied);'を使用してください。.. http://anaturb.net/C/string_exapm.htm –