2011-03-02 121 views
2

免費可以說,我已經在節目動態內存分配和使用C

char* s = malloc(sizeof(char) * 128); 

創建一個字符串動態,我們開始使用年代以前,如何檢查內存是否被分配或不?

free(s); 

在使用free()之前,我想檢查是否還有其他指向s的指針。

+0

你應該做的第一件事就是從你的C詞彙表中刪除'sizeof(char)'。這是一種非常醜陋的方式來編寫'1',在閱讀你的代碼的任何人的腦海中引發一個警報。 – 2011-03-02 20:42:46

回答

7

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點,如果你(程序員)創造了他們其它指針。

+0

'char * q = s',您將有兩個指向同一位置的指針。 :) – 2011-03-02 19:42:09

0

malloc的規格說,它將返回NULL失敗。所以如果malloc不返回NULL那麼你可以依靠編譯器來分配內存。不幸的是,沒有標準的方法來判斷是否有其他指針指向相同的內存。所以在free之前,你需要確保自己是一個程序員,不需要內存。

1

而且使用免費()之前,我想 檢查是否有任何其他指針 指向秒。

一般來說,你不能這樣做 - 你必須要管理什麼其他所有指針都在做自己。

一個常見的幫手是在釋放它之後將's'設置爲NULL,那麼您至少可以檢測's'是否仍然在其他函數中使用,但是您不能自動檢查' S'。

+0

我經常創建一個「聰明自由」的宏來做到這一點。它調用'free',然後將指針設置爲NULL。它適用於全局可訪問的指針,但如果你已經制作了一堆指針副本,它將無濟於事。 – bta 2011-03-02 19:37:38