[問題] 用指標讀取struct的內容 記憶區段錯誤

看板C_and_CPP作者 (Crysis)時間13年前 (2012/06/06 11:58), 編輯推噓1(105)
留言6則, 6人參與, 最新討論串1/1
問題(Question): 我將指向struct的指標傳入函式createListNode作malloc 離開函式後用指標去讀struct內容就會發生記憶體錯誤 預期的正確結果(Expected Output): 主程式將struct內的變數值印出後結束 錯誤結果(Wrong Output): 執行到取值時顯示 程式記憶體區段錯誤 程式碼(Code):(請善用置底文網頁, 記得排版) struct posnode{ long pagepos; }; typedef struct posnode PosNode; typedef PosNode *PosNodePtr; PosNodePtr startPtr = NULL; static void createListNode(PosNodePtr ptr); int main(){ createListNode(startPtr); //傳入指標 printf("startPtr->pagepos=%ld\n", startPtr->pagepos); //這邊取值時記憶體錯誤 free(startPtr); return 0; } static void createListNode(PosNodePtr ptr){ ptr = malloc(sizeof(PosNode)); if(ptr!=NULL){ ptr->pagepos = 20; printf("ptr->pagepos=%ld\n", ptr->pagepos); //這邊取值時ok } } 補充說明(Supplement): 應該是指標傳入函式的問題, 若傳入的是&startPtr, 並且函式用PosNodePtr *ptr來接, 就能正常結束 這邊想不通為何我原先的作法有問題, 麻煩幫我解惑, 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.186.181

06/06 12:09, , 1F
http://ideone.com/S51Yo 跟value為什麼不會變成100相同
06/06 12:09, 1F

06/06 12:10, , 2F
置底13誡的最後一個
06/06 12:10, 2F

06/06 12:14, , 3F
類似的問題 #1EMIxS0J
06/06 12:14, 3F

06/06 12:17, , 4F
你沒把指標回傳回來...
06/06 12:17, 4F

06/06 13:18, , 5F
瞭解了, 謝謝樓上各位!
06/06 13:18, 5F

06/06 16:42, , 6F
13戒
06/06 16:42, 6F
文章代碼(AID): #1FpjLXnA (C_and_CPP)