作者softwind (software everywhere)
看板C_and_CPP
標題Re: [問題] C 的字串與記憶體問題
時間Fri Oct 2 00:51:53 2009
※ 引述《bayes (貝斯)》之銘言:
: 各位好:
: 請問下面這一段程式有什麼問題嗎
: void getMemory(char* p, int num)
: {
: p = (char*)malloc(sizeof(char)*num);
: }
: void main()
: {
: char* str = NULL;
: getMemory(str, 100);
: strcpy(str, "Hello");
: }
換個角度看
typedef char* T_Pointer;
void getMemory( T_Pointer p_, int num){
p_ = (T_Pointer*)malloc( sizeof(*p_)*num );
}
上面這個動作 你覺得對嗎?
你改 p_ 事實上 她也只是外面的copy而已
你並沒有真的 透過它的address改到任何東西~
正確版 應該是 你把address傳進去
caller:
T_Pointer ptr; //這邊就挖一塊空間了
getMemory( &ptr, 100 );
// ^^^ 把address丟進去
so 相對應的函式宣告應該是
void getMemory( T_Pointer *p_, int num);
實作的時候 就交給compiler 給你error/warning message吧
我傾向 讓你自然而然學會 閱讀compiler的message...
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.120.44
推 QQ29:T_pointer 這樣寫得好像是要先tyepdef喔XD 10/02 01:00
→ QQ29:眼殘一開始就typedef了= = 10/02 01:04
→ softwind:其實 我只是希望第一po 把它看成一種data type 10/02 01:05
→ QQ29:我覺得原波 可能不知道兩顆星星是幹嘛的耶~ 10/02 01:06
→ softwind:不要一直覺得 使用 char* 是不需要 occupy mem space. 10/02 01:06
推 VictorTom:推樓上這句話:) 10/02 09:33