これは私が書いた簡単なプログラムです:削除原因予期せぬクラッシュ
using namespace std;
int main() {
string *word = new string[1]; //create a string object
*word = "blablabla"; //assign a string to that object
cout << "String: " << *word << endl;
delete word; //delete object? Causes unexected crash
int *ar = new int [10]; //create array of 10 blocks
ar[3] = 4; //assign a value to bl-3
cout << ar[3] << endl;
delete ar; //delete object, works
return 0;
}
を今、私はこれまで理解して何から、1が(new[]
でnew
(私が作成し、削除一つのオブジェクトのように)とdelete[]
でdelete
を使用しています削除してオブジェクトの配列を作成します)。問題は、以前のdelete
が私のプログラムをクラッシュさせ、後者は正常に動作するということです。ただし、delete[] word
の作業は行われます。
オブジェクトの配列はどのように作成していますか? string *word = new string[1]
がただ1つのオブジェクトを作成すると誤解していますか?
あなたはこの '削除[] word'のような配列を削除します。 –
作成するオブジェクトの数は関係ありません。あなたが 'new []'を使うなら、あなたは 'delete []'を使わなければなりません。 – NathanOliver
ポインタで遊んでいないのであれば、代わりに 'std :: vector'を使うことをお勧めします。 –