2013-12-21 32 views
2

我想爲char指針和刪除操作符的使用做一個例子。代碼非常簡單:指定內存位置沒有指針。刪除操作有什麼問題?

char name[] = "subject"; 
char *nameptr = name; 
cout <<"&nameptr: " <<&nameptr<< endl; 
delete [] nameptr; 

,我不斷收到此錯誤:

*** glibc detected *** free(): invalid pointer: 0xbf9e4194 *** 

,我知道nameptr指出了位置0xbf9e4184,從輸出。 沒有指針指向該位置(0xbf9e4194)。 我相信這是與我使用刪除,但我無法弄清楚。

+1

請不要通過猜測來編程。閱讀一本講述系統語言的好書。 –

回答

3

您只能分別在分配newnew []的內存上調用deletedelete []。沒有必要釋放像"subject"這樣的字符串文字。

這裏有一個字符數組,包含「主題」:

+0

感謝@ godel9的寶貴信息。我還有一個問題。在我致電刪除後,我無法打印任何其他內容。它是否必須在主結束時被調用? – melis

+0

在你的例子中,你永遠不需要調用'delete []'。一般來說,每個'new/new []'調用應該有一個'delete/delete []'調用。如果你永遠不會調用'new',你永遠不需要調用'delete'。 – godel9

3

BY語句檢查你的代碼語句

char name[] = "subject"; 

在這裏定義一個指針,指向上述的陣列:

char *nameptr = name; 

這裏delete[]你做了什麼不是分配你唱new[](事實上,namenew[]分配的,你沒有寫:char * name = new char[...]):

delete [] nameptr; 

所以,一個錯誤的是(正確地)檢測,因爲你試圖釋放這一點是很未使用new(或malloc)分配到堆上。