C_and_CPP 板


LINE

※ 引述《sunneo (艾斯寇德)》之銘言: : 這裡是指其他的process沒錯 : 不過這裡是舉單純是對無效位址free的例子 : 假使有一以shared共享的全域變數個指標使用malloc配置記憶體並且作為回傳值 : 這時候別的process看到的可能是同一個記憶體位址,因為是一個共享變數的資料 : 但該位址在自己的proecss不見得有配置記憶體,那麼再free的時候就會失敗。 : 這裡說的shared修飾是以下這兩種 : #pragma data_seg("shared") : __attribute__((section ("Shared"), shared)) : (或者單純只是在win 95/98/me下的情形) 我想你說的沒錯,但老實這個情況有點極端,因為在 shared section 放 pointer 的唯一用處,就是這個 pointer 指向同在 shared section 的記 憶體區塊。拿來指向 malloc 的結果,對其它 process 來說完全無用,我 好奇哪個人會這樣寫 DLL。 回到原po的問題,在 DLL 中呼叫 malloc 而在 client code 呼叫 free, 我認為並沒有什麼技術上的問題,但在 library 的設計上這樣做的確是不 好的。比如說你寫了某個 function 會回傳 malloc 配置到的空間: int* foo(void) { int* p = malloc(...); ... // 一些運算 return p; } 乍看之下,只要呼叫 foo() 的那端有確實呼叫 free 來釋放記憶體,就不 會有 memory leak 的問題。但要是過了一陣子,你想把 malloc 改成new (或是你想自己寫 memory allocator),問題就來了。因為用 new 去配置 的區塊必需用 delete 去釋放,所以你這一改,所有呼叫到 foo() 的地方 也都要跟著改了。 改進方法是寫另一個 function 去釋放記憶體: void Release(int* p) { // client code 一定要呼叫 Release 才能釋放記憶體 // 所以要是我們改用 new 來配置,只要在這邊改成 // delete 即可 free(p); } 設計上有個要點是:當你寫了某個會配置資源並回傳給 client 的 function, 那你應該也要寫一個對應的 function 來釋放資源。這麼一來,client 就完 全不需要知道你如何配置及釋放,你隨時可以抽換這部份的功能。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.114.95







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP