我已經編寫了一個API,要求上下文被初始化,然後傳遞給每個API調用。調用者爲上下文分配內存,然後使用其他參數將其傳遞給init函數,這些參數描述了他們希望以後的API調用的行爲方式。背景是不透明的,所以客戶不可能真的在那裏四處遊蕩;它僅用於API函數的內部使用。驗證內存已初始化在C
我遇到的問題是調用者正在分配上下文,但沒有初始化它。因此,隨後的API函數指向無意義的垃圾,就像它是一個真實的上下文一樣。
我正在尋找一種方法來驗證傳入API函數的上下文實際上已經初始化。我不確定這是否可能。我想到的兩個想法是:
- 使用預定義的常量並將其存儲在上下文的「魔術」字段中,以在API調用時進行驗證。
- 使用上下文內容的校驗和,將其存儲在「magic」字段中並在調用時驗證它。
不幸的是我知道的這些選項的任何一個可能會導致假陽性的驗證,要麼是因爲在內存中隨機廢話相匹配的「魔術」號,或者因爲上下文恰好佔據相同的空間作爲先前初始化上下文。我認爲後一種情況更可能。
這是否簡單歸結爲概率問題?我可以在大多數情況下避免誤報,但不是全部?是否值得使用一個僅僅給我一個合理的準確概率的系統,或者這會讓調試其他問題變得更加困難?
這隻適用於調試版本 - 您不能依靠此版本代碼 – 2009-01-24 08:33:22