我讀過很多,其中包括here on SO,這表明這是一個非常糟糕的主意,而且您唯一可以安全行事的就是退出程序。我不確定這是否屬實。在這種情況下捕獲訪問衝突安全嗎?
這是一個將大量分配移交給malloc的池化內存分配器。在pool_free()期間,指針需要被檢查,它屬於一個池或被分配了malloc。通過將地址四捨五入到最接近的1MB邊界,我得到一個指向池中內存塊開始的指針,如果使用了malloc,則指向undefined。在第一種情況下,我可以輕鬆驗證內存塊是否屬於池,但是,如果不是,我將通過此驗證,或我將得到訪問衝突(請注意,這是一個只讀過程)。我能不能用SEH(Windows)來處理這個問題,或者處理信號(POSIX),並簡單地將其視爲驗證失敗? (即只有在使用malloc的情況下才可能,所以通過ptr釋放())
編輯:人們似乎錯過了上面的OR。如果指針是用malloc分配的,我不希望獲得訪問衝突,但這是一個可能的結果。使用指向塊開始的指針(在1MB邊界處)的過程是驗證幻數,然後跟隨一個指向內存池的指針,並檢查它是否實際上包含上述指向塊的指針。如果這些只讀步驟中的任何一個產生訪問衝突,那麼驗證失敗,就像任何單個步驟失敗一樣。
任何可用的_undefined_行爲都應該固定。其他一切都是瘋狂的。 – LukeN 2010-05-28 22:11:50