[問題] 指標的指標問題

看板C_and_CPP作者 (kswiss)時間14年前 (2011/08/27 10:38), 編輯推噓2(2017)
留言19則, 7人參與, 最新討論串1/2 (看更多)
開發平台(Platform): 問題(Question): 請問以下程式碼的*p1=(char*)malloc(16); 是以下哪張圖才是正確的 圖一. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ p1----->p|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| 共16個byte給指標p本身記憶體 圖二. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ p1-----> p----->|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| 共16個byte給指標p所指向的 記憶體位置 程式碼(Code): #include<stdio.h> #include<stdlib.h> #include<string.h> void test(char**p1) { *p1=(char*)malloc(16); strcpy(*p1, "Hello"); } void main() { char*p=NULL; printf("%p\n", &p); test(&p); printf("%s\n", p); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.95.182

08/27 20:44, , 1F
2?
08/27 20:44, 1F

08/27 22:05, , 2F
我真心奉勸你,標題先改好
08/27 22:05, 2F

08/27 22:10, , 3F
我真心奉勸你先讀完一遍整本書再說。
08/27 22:10, 3F

08/27 22:11, , 4F
觀念上2是對的,但副檔案裡面觀念完全不對,書上有寫。
08/27 22:11, 4F

08/27 22:12, , 5F
↑(副檔案 改 副函式)
08/27 22:12, 5F

08/27 23:58, , 6F
副檔案指的是???
08/27 23:58, 6F

08/28 00:09, , 7F
唔...暫時看不出副函式哪裡有問題,不過最好用 *int* main
08/28 00:09, 7F

08/28 00:10, , 8F
然後最好寫 printf("%p\n", (void*)&p);
08/28 00:10, 8F

08/28 00:15, , 9F
正確的說法是,呼叫副函式的地方,會造成違規存取,
08/28 00:15, 9F

08/28 00:15, , 10F
另外帶一份 memory leak.
08/28 00:15, 10F

08/28 00:20, , 11F
感覺好像都不會吧
08/28 00:20, 11F

08/28 00:21, , 12F
... Orz.. 抱歉,這寫法是沒錯的,沒違規存取,沒 mem.l~
08/28 00:21, 12F

08/28 00:21, , 13F
喔,漏看了沒 free
08/28 00:21, 13F

08/28 00:28, , 14F
請加free(p)在main
08/28 00:28, 14F

08/28 00:36, , 15F
跟大家討論一下,*p1=(char*)malloc(16)與p1=(char**)mall
08/28 00:36, 15F

08/28 00:37, , 16F
oc(16)兩者之間的語意有何差異???
08/28 00:37, 16F

08/28 00:45, , 17F
*p1 跟 p1, 作用的對象不同.
08/28 00:45, 17F

08/28 07:54, , 18F
厄...理論上來說,p1是用來存取p的位置,在透過*p1去間接
08/28 07:54, 18F

08/28 07:54, , 19F
操作p的malloc.
08/28 07:54, 19F
文章代碼(AID): #1EMCaGfz (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1EMCaGfz (C_and_CPP)