被delete難倒了
話說我有一個結構體如下:
























































































我定義了一個vector<stReplayData*> m_vecReplay,然后new了一些stReplayData ,push_back這些指針進去,最后程序釋放資源的時候,居然報調用釋放指針出錯了,報的錯就是平時見的很多的Heap上指針無效的錯誤,基本上是說stReplayData的析構函數有問題,我了個擦,我怎么沒看出哪里有問題呢?
=====================================更多的代碼如下===============================================
我封裝了一個dll作為一個公共模塊,自然數據都會在這個公共模塊中存儲,其中內存數據的管理也會在這個dll中去做,也就是說,new和delete都會由這個dll自己去管理,
使用者只要去調接口,然后把需要存儲的數據地址傳給dll,讓dll自己去拷貝即可。模塊其實非常簡單:

































=================================總結=================================
re: 被delete難倒了 2011-03-31 11:49 dizhu
問題就是SAFE_DELETE((*it)); 這個是在exe中new的,不能在dll中delete。
深入:
如果一個EXE調用一個DLL時,用new和delete分配和釋放內存為什么應該放在同一個背景下的原因。得出的結論是,如果EXE和DLL有一個不是用動態鏈接CRT庫(C runtime library)的方式使用CRT的話(Multi-threaded Debug DLL (/MDd)),或者是EXE和DLL動態鏈接的CRT庫的版本不同時,EXE和DLL將會各自擁有各自的堆空間,所以在DLL中new的東西務必在DLL中delete。
posted on 2011-03-30 17:29 zuhd 閱讀(2190) 評論(29) 編輯 收藏 引用 所屬分類: c/c++