1. 程式人生 > >c++二進位制讀取類的資訊時出現訪問異常:0xC0000005讀取位置0x00491F10時發生訪問衝突

c++二進位制讀取類的資訊時出現訪問異常:0xC0000005讀取位置0x00491F10時發生訪問衝突

       最近再做一個系統時,寫了一個基類4個派生類,基類中有虛擬函式,每次修改之後就將二級制資訊儲存進*.dat檔案。

但是在再起啟動程式時就出現這樣的訪問衝突問題,然後就一直困擾了3天,搜百度,部落格,知乎等。最後還是在老師的提醒下發現問題出現在哪裡。

      每個類每多一個虛擬函式,其記憶體大小就多4個位元組用來存放改函式對應的地址,所以在用二進位制存取的過程中也將虛擬函式的地址存入*.dat檔案,接下來重啟程式時,此時生成程式的虛擬函式地址可能已經改變,但是在二進位制讀取時還是讀取的原來的函式地址,所以在使用基類時的資料就會出現訪問錯誤,可能會訪問位置記憶體,但沒有訪問許可權,接下來就是程式異常退出。

 大概就是這樣的問題,我試著換了還文字模式讀取資訊,成功!!!

還有需要注意一點的是 new開闢記憶體時會呼叫類的建構函式,但是malloc不會,後者只是在棧上非分配指定大小記憶體而已。