作者jwliang (人類是很善良的)
看板C_and_CPP
標題[問題] malloc的問題
時間Mon Nov 25 13:40:23 2013
各位強者大家好,以下有兩段程式碼,都可以順利執行rum-time無錯誤:
第一段:
struct ns{
int data;
};
void allocation(struct ns **temp){
//*temp位址印出為b7711000
*temp=(struct ns *)malloc(sizeof(struct ns ));
//*temp位址印出為8a4c008
}
int main(){
struct ns *temp;
//temp位址印出為b7711000
allocation(&temp);
//temp位址印出為8a4c008
temp->data=5;
}
--------------------------------------------------------------------
第二段:
struct ns{
int data;
};
void allocation(struct ns *temp){
//temp位址印出為b76ce000
temp=(struct ns *)malloc(sizeof(struct ns ));
//temp位址印出為9313008
}
int main(){
struct ns *temp;
//temp位址印出為b76ce000
allocation(temp);
//temp位址印出為b76ce000
temp->data=5;
}
以上兩段程式碼皆為分配記憶體空間,使得temp->data=5可以執行,
小弟想請問的是,第一段程式碼是將&temp傳入,也就是將temp本身的位址傳入allocation,
第二段則是把尚未分配空間的指標temp傳入allocation,
為何都可以讓temp->data=5順利執行呢?
我在面試的時候寫的是第二段程式碼,面試官說不可能過,第一段程式碼是他心中的答案,
但我回家試了之後發現似乎皆可,不知其中意義差別為何,會有何影響呢? 謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.44.28.73
推 yvb:把呼叫 allocation() 前後, temp 的值(指向的addr)印出來看看. 11/25 13:46
→ yvb:喔, 還有 allocation() 裏面 temp 的值也印出來看. 11/25 13:48
※ 編輯: jwliang 來自: 114.44.28.73 (11/25 13:55)
→ jwliang:已印出,從印出的結果我認為第一段才是對的 但是為何 11/25 13:56
→ jwliang:第二段卻能正確執行而不記憶體錯誤呢? 11/25 13:57
→ Feis:是未定義行為, 運氣好就不會出事. 你今天買樂透了嗎? 11/25 13:59
→ jwliang:恩 了改~ 11/25 14:14