[問題] 指標指定給指標問題

看板C_and_CPP作者 (幻想的夢境)時間10年前 (2014/07/11 01:33), 10年前編輯推噓1(108)
留言9則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC2010 問題(Question): 我將A指標的資料直接指定給B指標 但是在free時,卻出現堆積損毀 程式碼(Code):(請善用置底文網頁, 記得排版) 以下是部分程式碼 #include<stdio.h> #include<stdlib.h> #include<malloc.h> void map(double *A); int main(){ double *A,*B; int i; A=(double *)malloc(sizeof(*A)*32); for(i=0;i<32;i++) *(A+i)=i; map(A); free(A); //這邊在free時會損毀 return 0; } void map(double *A){ int i; double *B; B=(double *)malloc(sizeof(*B)*32); B=A; //這種寫法有問題 //如果改成以下這樣就不會有問題了 for(i=0;i<32;i++) *(B+i)=*(A+i); free(B); } 我想問一下,為什麼不能直接address mapping? 而要每個值指定呢? 先謝謝了... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.233.78.140 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1405013610.A.D70.html ※ 編輯: jacky1989 (118.233.78.140), 07/11/2014 01:34:20

07/11 01:38, , 1F
因為B=A是複製位址不是內容
07/11 01:38, 1F
我知道阿~但是理論上複製位址應該內容也會相同不是? 而且就算內容不會複製,又怎麼會堆積損毀呢?? ※ 編輯: jacky1989 (118.233.78.140), 07/11/2014 01:40:59

07/11 01:43, , 2F
你整個誤會很大...
07/11 01:43, 2F

07/11 01:44, , 3F
free只看實際位址不看是A還B free2次同樣位址就爆了
07/11 01:44, 3F

07/11 01:44, , 4F
若是複製位址時,在函式裡有 free(B) 動作,原本的空間被
07/11 01:44, 4F

07/11 01:44, , 5F
放掉,回到主程式,free(A),這時就 double-delete 了.
07/11 01:44, 5F

07/11 01:44, , 6F
@@ op 了, 抱歉 orz
07/11 01:44, 6F
了解了,感謝各位的指教,我指標學的還不夠好.....Orz ※ 編輯: jacky1989 (118.233.78.140), 07/11/2014 01:45:39

07/11 02:13, , 7F
你打了一份門鑰匙給了別人, 然後別人把房子賣了
07/11 02:13, 7F

07/11 02:13, , 8F
你當然不能再賣一次房子...
07/11 02:13, 8F

07/11 02:14, , 9F
而且因為房子已經賣了所以你連住都不行 (*A 會出事)
07/11 02:14, 9F
神回覆~~ ※ 編輯: jacky1989 (140.136.146.114), 07/11/2014 16:03:34
文章代碼(AID): #1Jlivgrm (C_and_CPP)