[問題] link list 的malloc與free
我用 C 實作一個link list,編譯環境為VS 2008。
struct EVENT{
void* dataPtr; //// 指向malloc出來的data空間 ////
EVENT* link;
};
struct LIST{
int count;
EVENT* pos;
EVENT* head;
EVENT* rear;
int (*compare) (void* argu1, void* argu2);
};
......
最後,在刪除 LIST 前,我先用C的free(.)來釋放 EVENT 裡面dataPtr指向的記憶體,
然後free(.)掉該 EVENT,最後刪除 LIST。
我想的問題是,如果我的dataPtr吃進來的是一個struct,像這樣:
struct EventContent{
int type;
AAA* aaa; //// 會指向另一個malloc出來的空間 ////
};
那最後要free(.)掉dataPtr前,因為其狀態為void* 表什麼資料型態通吃,
如果吃到struct時,要free掉這個 EventContent,它只會把 EventContent釋放掉,
裡面的 aaa 指向的記憶體卻會變成垃圾,留在電腦裡直到程式結束。
所以要在刪除dataPtr時,尚需另外寫一行程式刪除dataPtr吃進來的指標,
麻煩的是,還要把 void* 先轉換成 EventContent* 才能free。
如欲將實現與應用切割開,每一次要用這個 LIST 的人,
都要小心吃進來的資料型態有無包含動態記憶配置的指標,不是很麻煩嗎?
有更好的方法可以解決問題嗎? 以C而言.....
謝謝各位!
===========
PS. 我想到做法就是用C++ 在 EventContent 放一個解構子,
專門釋放 aaa 指向的記憶體空間:
struct EventContent{
int type;
AAA* aaa; //// 會指向另一個malloc出來的空間 ////
~EventContent(){
if( aaa != NULL )
free(aaa);
}
};
然後產生以及刪除 EventContent 都用new跟delete,
還有,EVENT 的struct就要改成這樣:
struct EVENT{
EventContent* dataPtr; //// 指向用new出來的data空間 ////
EVENT* link;
};
這樣以後用的話只要針對不同需求建立相對應的 EventContent 的class就好,
不知道這是不是好的做法?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.144.18
※ 編輯: kkroy 來自: 140.113.144.18 (02/25 14:04)
※ 編輯: kkroy 來自: 140.113.144.18 (02/25 14:07)
推
02/25 14:07, , 1F
02/25 14:07, 1F
→
02/25 14:07, , 2F
02/25 14:07, 2F
→
02/25 14:08, , 3F
02/25 14:08, 3F
→
02/25 14:08, , 4F
02/25 14:08, 4F
→
02/25 14:08, , 5F
02/25 14:08, 5F
→
02/25 14:09, , 6F
02/25 14:09, 6F
→
02/25 14:09, , 7F
02/25 14:09, 7F
→
02/25 14:10, , 8F
02/25 14:10, 8F
推
02/25 14:29, , 9F
02/25 14:29, 9F
→
02/25 14:29, , 10F
02/25 14:29, 10F
→
02/25 14:30, , 11F
02/25 14:30, 11F
→
02/25 14:31, , 12F
02/25 14:31, 12F
→
02/25 14:31, , 13F
02/25 14:31, 13F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章