[問題] 用函式包裝 malloc

看板C_and_CPP (C/C++)作者 (酒池肉林夜夜生科)時間16年前 (2009/10/27 21:49), 編輯推噓1(1025)
留言26則, 3人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 如果想將 malloc 的功能擴充 而將 malloc 用函式包起來 這樣寫是不是真的有 malloc 到? 還是其實函式結束後空間就消失了? 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ 有問題的code: (請善用置底文標色功能) #include <stdio.h> int myMalloc(char*); int main() { int *i_ptr; i_ptr = myMalloc("test.txt"); system("PAUSE"); return 0; } int myMalloc(char *filename) { int x; int *i_ptr; //...假設這裏從檔案中取得一些值存入x... i_ptr = (int*)malloc(sizeof(int) * x); return i_ptr; } 補充說明: 有沒有更推薦或是比較標準的作法? 其實有想過可能函式要宣告成 int *myMalloc(char*); 但是感覺這樣好像也是可以... 感謝解答 <(-.-)> -- 想你的時候 不一定能告訴你 如果不告訴你 也能會意 那我們就是有 真正的默契 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.48.199

10/27 22:11, , 1F
就算是包裝起來, 有用到malloc就還是有用到, 動態配置的
10/27 22:11, 1F

10/27 22:12, , 2F
特性不會因為包裝過後就消失; 包裝是幫助你更方便使用:)
10/27 22:12, 2F

10/27 22:13, , 3F
對了, 你的myMalloc應該return int*型態才對吧....@_@"
10/27 22:13, 3F

10/27 22:20, , 4F
用完記得要 free, 跟一般使用 malloc 一樣
10/27 22:20, 4F

10/27 22:52, , 5F
想請問一下 return int 和 return int* 差別是...?
10/27 22:52, 5F

10/27 22:52, , 6F
是怕某些系統不是用 int 來存 address ??? 感謝解惑 @@"
10/27 22:52, 6F

10/27 22:53, , 7F
如果要 free 是直接在 main 裡 free 就可以了嗎?
10/27 22:53, 7F

10/27 22:54, , 8F
如果這裏改 return int* 是直接改宣告就好嗎?
10/27 22:54, 8F

10/27 22:56, , 9F
沒有用 int 存 int * 這種事, 用哪形態就 return 該種值
10/27 22:56, 9F

10/27 22:56, , 10F
既然你回傳的是 int *, 外面也是用 int * 來接, 當然宣告時
10/27 22:56, 10F

10/27 22:57, , 11F
就要告訴編譯器你的函式叫 int *myMalloc(char*);
10/27 22:57, 11F

10/27 22:57, , 12F
明白指出他是回傳 int * 的... 寫程式沒有 "感覺" 可不可以
10/27 22:57, 12F

10/27 22:58, , 13F
free 的話, 在哪裡都可以, 只要確認他有 free 過一次, 而且
10/27 22:58, 13F

10/27 22:58, , 14F
在 free 過之後就不能再次使用他了
10/27 22:58, 14F

10/27 23:00, , 15F
你要傳進函式裡, 比如說 void myFree(int *); 再 free 也行
10/27 23:00, 15F

10/27 23:35, , 16F
我覺得原po搞錯了一點, 不同型態不管幾維的pointer它就
10/27 23:35, 16F

10/27 23:35, , 17F
是pointer, 在不同platform上pointer的bit count可能會
10/27 23:35, 17F

10/27 23:36, , 18F
不同, 但是*掛在那就是pointer; int*或char*這些, 是指
10/27 23:36, 18F

10/27 23:36, , 19F
明如何解釋這個address上的資料; 用int直接記錄各種類型
10/27 23:36, 19F

10/27 23:37, , 20F
pointer指到的address實務上不是沒有地方應用, 但是您的
10/27 23:37, 20F

10/27 23:38, , 21F
表達似乎對它有一點誤解@_@"
10/27 23:38, 21F

10/27 23:39, , 22F
其他就如l大推的; 也建議malloc都包裝了, 基於成對style
10/27 23:39, 22F

10/27 23:40, , 23F
也把free自己包一下吧; 就算只搞得像別名也沒關係, 這與
10/27 23:40, 23F

10/27 23:40, , 24F
之後維護code時, 幫助你較容易了解code有點關係:)
10/27 23:40, 24F

10/28 02:08, , 25F
喔喔 我了解了 感謝兩位大大解惑 @@"
10/28 02:08, 25F

10/28 02:10, , 26F
原來是我把宣告和回傳方式搞混了 >"<
10/28 02:10, 26F
文章代碼(AID): #1AvlfI3W (C_and_CPP)
文章代碼(AID): #1AvlfI3W (C_and_CPP)