看板 C_and_CPP 關於我們 聯絡資訊
各位強者大家好,以下有兩段程式碼,都可以順利執行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