如何釋放我用於C中的變量(例如長字符串)的內存?如何釋放已用於C中變量的內存?
回答
假設您動態分配內存(使用malloc
或另一個內存分配程序),請使用free
釋放內存。如果內存是靜態分配的,則不能釋放它。
詛咒!再次挫敗!請注意,某些標準庫函數調用malloc或calloc,並將釋放內存的責任留給調用者。 – dmckee 2008-10-11 18:47:50
@dmckee:可能有第三方或平臺API要求您釋放()他們返回的塊,但我不知道任何標準庫函數(除了分配的函數 - malloc,calloc和realloc)做這個。 – 2008-10-12 00:22:24
這真的取決於你如何聲明你的變量 - 如果它是一個普通的變量,你不能「取消分配」它的內存 - 當它失控的範圍,想在這裏將被釋放:
for (int i=0;i<10;i++) {
int k=i;
//do stuff
}
我會當你退出循環時解除分配,並且在循環體中的每一次通過時,k都將被分配和釋放。
當它是關於運行時的內存分配,您可以使用您值得信賴的malloc和free :)
int* intArray;
malloc(200 * sizeof(int));
這會給你的200個整數數組。
假如你不使用malloc,並創建一個字符串或使用
char array[100];
緩衝區,但你知道,你只使用了很長一段的功能很短的一部分,你可以將該部分功能放在另一組{
int reallylongfunction() {
// Do a lot of stuff
{
char stringbuffer[100];
// Do stuff with the buffer...
// Ok, we're done with the buffer, and don't want it anymore
}
// Do a lot more stuff
return;
}
這將導致緩衝區超出範圍並被釋放。但要小心,在額外{}內部聲明的任何內容都將超出範圍並消失!
編輯:該死,評論是正確的。超出範圍的靜態字符串沒有任何好處。編輯所以它只是一個數組。
我建議你看看ustr,這是一個字符串API,你可以使用自動,常量和動態分配的字符串......其中只有兩個實際上可以「釋放」,但所有這些你可以用同樣的方式處理並傳給ustr_free()。
您可能仍然想了解堆棧,堆和數據(RO文本字符串)是如何「分配」和「釋放」的......但使用可用的API,而您正在學習這將停止幫助您你很多(並且將比你自己做的要快得多)。
這個問題真的不能沒有更多的信息回答。知道如何釋放對象(甚至知道它是否應該被釋放)的唯一方法是知道對象是如何分配的。
當我說對象,我的意思是不只是一個C++「對象」,但作爲在C標準用於「對象」:
數據存儲在 執行環境的區域,所述內容 它可以代表值
- 1. 釋放內存變量
- 2. C++:關於釋放內存
- 3. 如何斷言內存已被釋放
- 4. gc.collect是否爲我已刪除的變量釋放內存?
- 5. 如何在C++中釋放內存
- 6. 如何在C中釋放內存?
- 7. 如何在objective-c中釋放內存?
- 8. C++中指針變量的內存釋放
- 9. 如何使用vbscript釋放分配給變量的內存
- 10. 如何'釋放'分配給外殼中變量的內存
- 11. 如何在目標C中釋放和釋放這些變量?
- 12. 的Objective-C:如何釋放內存AvAudioPlayer
- 13. 在C++中爲const char *變量釋放內存
- 14. 關於釋放內存分配C
- 15. 如何在Python列表中立即釋放已用內存?
- 16. 如何釋放局部變量的動態分配內存?
- 17. 如何正確釋放JavaScript變量的內存?
- 18. 變量連接到Interface Builder時釋放內存不釋放時,如何修復?
- 19. Perl何時從內存中釋放它的詞彙變量?
- 20. 如何使用已調整的指針安全釋放內存
- 21. 產量和釋放內存
- 22. 釋放內存基於APP?
- 23. 已釋放指針的realloc內存?
- 24. Objective C - 釋放變量
- 25. C++ 11變量重新分配內存釋放
- 26. PHP如何爲變量分配和釋放內存?
- 27. 如何爲結構變量釋放內存
- 28. C - 如何使用free()釋放內存中的結構?
- 29. C++ dtor釋放_bstr_t內存
- 30. 內存釋放目標C
可以使用一些說明。你動態分配了這個內存嗎?或致電圖書館爲你做了嗎?你是否試圖回收與自動或靜態變量相關的內存? – dmckee 2008-10-11 18:57:14