2017-03-16 70 views
-1

这是一个简单的程序中,我写道:删除导致意外崩溃

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]只创建一个对象?

+2

您删除这样的阵列'删除[word'。 –

+0

您创建的对象数量无关紧要。如果你使用'new []'你必须**使用'delete []'。 – NathanOliver

+0

如果你不玩指针,我会建议使用'std :: vector'来代替。 –

回答

1

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

的排序。

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

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

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

delete [] word; 

delete [] ar; 
+0

那么'删除ar'也不正确? –

+0

@HichigayaHachiman,这是正确的理解。你需要使用'delete [] ar;'。 –