回答
因爲delete[]
是非法的,所以您沒有用new[]
分配任何東西。而已。
沒有,str
不點到堆棧上的東西,但是到了字符串字面,這是不可改變的,通常駐留在只讀段。
所以它會在函數調用結束時自動刪除str? – 2013-04-05 19:55:08
@JavaNewb不,不是字符串文字。字符串文字具有靜態存儲持續時間。他們持續整個計劃。爲什麼?因爲它們必須存儲在你的可執行文件的某個地方,並且你的可執行文件被加載到內存中執行。 – 2013-04-05 19:55:41
@JavaNewb'str',是的,字符串本身 - 沒有。但你不必擔心。 – 2013-04-05 19:55:45
您不能delete
東西沒有與new
分配。此外,該字符串駐留在只讀存儲器中,無法刪除。
要看到這一點,請嘗試使用-S編譯。例如。
// ex.c
int main(){
const char * s = "hello my name is Stack";
}
當
gcc -S ex.c
編譯你會得到包含在頂部以下文件ex.s
:
.file "ex.c"
.section .rodata
.LC0:
.string "hello my name is Stack"
.text
正如你所看到的,字符串本身是在組裝,它不會在運行時分配。程序運行時,文字駐留在只讀存儲器(.rodata
)中。
Luchian已經描述了這個問題,我想給出它崩潰的可能原因。
堆將有一個存儲列表,它已經分配了什麼內存塊;當你調用delete[]
時,它會嘗試找到它先前分配的內存塊,並將這塊內存返回到未分配的堆。這會失敗,因爲你沒有在堆上分配你的變量。沒有找到有效的內存位來釋放它,然後嘗試寫入空指針併產生崩潰。
字符串不在堆棧中。 – 2013-04-05 20:11:38
- 1. 刪除QCamera崩潰程序
- 2. C程序,printf char *崩潰
- 3. AVL樹刪除導致程序崩潰
- 4. C++ char *錯誤,程序崩潰
- 5. 程序崩潰時使用char *
- 6. char arr =「...」;在C程序導致崩潰
- 7. CreateDirectory崩潰程序
- 8. 程序崩潰
- 9. C - 程序崩潰
- 10. C++程序崩潰
- 11. 程序崩潰
- 12. 引導程序崩潰立即崩潰
- 13. 程序崩潰::墊
- 14. Python程序崩潰
- 15. 刪除線程時發生崩潰
- 16. 指針刪除崩潰
- 17. 崩潰刪除行的tableView
- 18. c + +刪除陣列崩潰
- 19. 刪除UITableViewCell導致崩潰
- 20. iOS - PFQueryTableViewController - 刪除行崩潰
- 21. iPhone managedobject刪除崩潰
- 22. 崩潰的刪除片段
- 23. 程序崩潰
- 24. removeObjectAtIndex崩潰應用程序
- 25. C++/QT:QTextStream程序崩潰
- 26. qsort崩潰程序 - C
- 27. boost :: interprocess :: managed_shared_memory崩潰程序
- 28. 內聯程序集崩潰?
- 29. C程序崩潰後strcpy
- 30. 有時程序崩潰
字符串文字具有靜態存儲持續時間。你只能用'new []''刪除[]'你分配的內容。 – jrok 2013-04-05 19:54:49
僅僅因爲它是一個指針並不意味着它需要被刪除。 – 0x499602D2 2013-04-05 20:26:16