免費可以說,我已經在節目動態內存分配和使用C
char* s = malloc(sizeof(char) * 128);
創建一個字符串動態,我們開始使用年代以前,如何檢查內存是否被分配或不?
free(s);
在使用free()之前,我想檢查是否還有其他指向s的指針。
免費可以說,我已經在節目動態內存分配和使用C
char* s = malloc(sizeof(char) * 128);
創建一個字符串動態,我們開始使用年代以前,如何檢查內存是否被分配或不?
free(s);
在使用free()之前,我想檢查是否還有其他指向s的指針。
malloc()
返回指向新分配的內存或NULL的指針。
所以檢查NULL
char *s = malloc(128); /* sizeof (char), by definition, is 1 */
if (s == NULL) {
/* no memory allocated */
} else {
/* use memory */
free(s);
}
有指向只有s
點,如果你(程序員)創造了他們其它指針。
'char * q = s',您將有兩個指向同一位置的指針。 :) – 2011-03-02 19:42:09
malloc
的規格說,它將返回NULL
失敗。所以如果malloc
不返回NULL
那麼你可以依靠編譯器來分配內存。不幸的是,沒有標準的方法來判斷是否有其他指針指向相同的內存。所以在free
之前,你需要確保自己是一個程序員,不需要內存。
而且使用免費()之前,我想 檢查是否有任何其他指針 指向秒。
一般來說,你不能這樣做 - 你必須要管理什麼其他所有指針都在做自己。
一個常見的幫手是在釋放它之後將's'設置爲NULL,那麼您至少可以檢測's'是否仍然在其他函數中使用,但是您不能自動檢查' S'。
我經常創建一個「聰明自由」的宏來做到這一點。它調用'free',然後將指針設置爲NULL。它適用於全局可訪問的指針,但如果你已經制作了一堆指針副本,它將無濟於事。 – bta 2011-03-02 19:37:38
你應該做的第一件事就是從你的C詞彙表中刪除'sizeof(char)'。這是一種非常醜陋的方式來編寫'1',在閱讀你的代碼的任何人的腦海中引發一個警報。 – 2011-03-02 20:42:46