删除导致意外崩溃

时间:2017-03-16 16:35:55

标签: c++ constructor crash destructor

这是我写的一个简单程序:

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;
}

根据我的理解,到目前为止,人们使用delete new(如删除我创建的一个对象)和delete[] new[](删除并创建)一组对象)。问题是前者delete导致我的程序崩溃,而后者工作正常。但是,delete[] word可以正常工作。

那么我如何创建一个对象数组呢?我错误地认为string *word = new string[1]只创造了一个对象?

1 个答案:

答案 0 :(得分:1)

  

那么我如何创建一个对象数组呢?我错误地认为string *word = new string[1]只创造了一个对象?

排序。

您正在创建一个包含1个对象的数组。

您正在创建一个对象。这是真的。你还在创建一个数组。

因此,您需要使用delete []表单。

delete [] word;

delete [] ar;