2017-03-16 98 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;'。 –