有什麼方法可以確定緩衝區是否由'malloc'分配?就像具有以下簽名的功能:識別分配給malloc的緩衝區()
bool is_malloced(void *buf);
這樣的機制是否存在於posix中?
有什麼方法可以確定緩衝區是否由'malloc'分配?就像具有以下簽名的功能:識別分配給malloc的緩衝區()
bool is_malloced(void *buf);
這樣的機制是否存在於posix中?
沒有。 C11和POSIX都不提供這樣的機制。如果
嗯,你是一個認真的人,你可以真正做到:
Hash *hsh; /* global hash already initialized. */
void *custom_malloc(size_t size)
{
void *ptr;
ptr = malloc(size);
hash_add(hsh, ptr);
return ptr;
}
/* tester */
_Bool malloced(void *ptr)
{
if(hash_retrieve(hsh, ptr))
return TRUE;
return FALSE;
}
當然做這樣的事情簡直是瘋了,但實際上你可以。
這是瘋了。這是一個思想實驗。它不會進入真正的代碼。 –
一種簡單的方法來模擬這樣的functinality將包裹在malloc()
一個自定義功能,其中:
給定一個指針可以檢查它是否之前遞增4個字節的指針是malloc
'通過尋找神奇的編號。
當然,它並不完美:
free()
呼叫中將它設置爲null可以提供幫助。用指針異或可以使它更可靠。不過,這是一種啓發式的方法。所有的缺點,它仍然是一種有用的技術,我在調試嵌入式系統中的一些內存損壞時使用了它幾次。
如果我們打算用malloc()
替換一些包裝,我們也可以建立一個分配塊的鏈表。更可靠,但也更復雜。
'bool is_malloced(void * buf){free(buf);返回true; }';)說真的,我不知道這樣的事情。 –
不,但你可以編寫自己的分配器來支持這個。但爲什麼你認爲你需要這樣一個功能? – TJD
我其實不需要*這樣的功能,我只是好奇... –