2013-04-24 105 views
0

我有一個沒有內存的函數。如何斷言內存已被釋放

我想在調用這個函數後聲明函數釋放了給定的內存。

而我無法改變這個功能中的任何東西。

我需要uni測試。我想測試我的功能,我想檢查調用它

的問題後,我真的函數釋放內存,就是在代碼

void func(char *mem) 
{ 
    // Some where in the function there is a free of the memory 
    // The free could be into if condition so there is a risk to not be executed 
} 

int main() 
{ 
    char *mem = malloc(20); 
    func(mem); 
    // how to assert here that the memory is freed? 
} 
+0

你不需要。如果你釋放()內存,它將被釋放。 – 2013-04-24 17:06:52

+2

@ H2CO3仔細閱讀問題。 – gbtimmon 2013-04-24 17:09:46

+0

@gbtimmon我完全讀過這個問題。設計有缺陷,這是一個XY問題。解決方案不是「斷言內存是否被釋放」。 – 2013-04-24 17:10:59

回答

5

簡短的回答:有沒有辦法來實現這一目標。

確保free'd內存不會被意外重新使用或識別某些指針爲空的常用方法是在釋放它之後立即將其設置爲NULL。爲了達到這個目的,在你的例子中,你需要對func()進行修改。如果您不能對func()進行任何更改,則無法確定傳遞給它的指針是否已釋放或仍然有效。

此外,如果你func()將釋放內存的一些電話,而不是其他電話,那麼這是一個糟糕的設計。有一種更好更透明的方式來管理動態分配的內存。

+0

我需要uni測試。我想測試我的功能,我想檢查我的功能是否真的釋放了內存。它與我的程序設計無關 – MOHAMED 2013-04-24 17:20:17

+0

在這種情況下,你可以讓func()在*釋放*的時候將指針設置爲NULL,並在你的調用者函數中檢查NULL。 – 2013-04-24 17:28:43

+0

如何將指針設置爲NULL將幫助我們確定內存是否已釋放?因爲func()中的指針是一個副本,我們將該副本更改爲NULL,因此main的變量「mem」中沒有變化。 – 2013-04-24 18:04:29