【问题标题】:Delete causes unexpected crash删除导致意外崩溃
【发布时间】:2017-03-16 16:35:54
【问题描述】:

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

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

现在据我所知,使用deletenew(如删除我创建的一个对象)和delete[]new[](删除并创建一组对象)。问题是前者delete 导致我的程序崩溃,而后者工作正常。但是,执行 delete[] word 可以。

那么我如何创建一个对象数组呢?我是否误以为 string *word = new string[1] 只创建了一个对象?

【问题讨论】:

  • 你像delete [] word这样删除数组。
  • 您创建的对象数量无关紧要。如果您使用new[],您必须使用delete[]
  • 如果你不玩指针,我建议改用std::vector
  • here
  • 所以delete ar工作只是巧合?

标签: c++ constructor crash destructor


【解决方案1】:

那么我如何创建一个对象数组呢?我是否误以为string *word = new string[1] 只创建了一个对象?

有点。

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

您正在创建一个对象。确实如此。您仍在创建数组。

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

delete [] word;

delete [] ar;

【讨论】:

  • @HichigayaHachiman,这是正确的理解。您需要使用delete [] ar;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多