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

作者: jacky1989   2014-07-11 01:33:27
開發平台(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?
而要每個值指定呢?
先謝謝了...
作者: azureblaze (AzureBlaze)   2014-07-11 01:38:00
因為B=A是複製位址不是內容
作者: EdisonX (卡卡獸)   2014-07-11 01:43:00
你整個誤會很大...
作者: azureblaze (AzureBlaze)   2014-07-11 01:44:00
free只看實際位址不看是A還B free2次同樣位址就爆了
作者: EdisonX (卡卡獸)   2014-07-11 01:44:00
若是複製位址時,在函式裡有 free(B) 動作,原本的空間被放掉,回到主程式,free(A),這時就 double-delete 了.@@ op 了, 抱歉 orz
作者: LPH66 (-6.2598534e+18f)   2014-07-11 02:13:00
你打了一份門鑰匙給了別人, 然後別人把房子賣了你當然不能再賣一次房子...而且因為房子已經賣了所以你連住都不行 (*A 會出事)

Links booklink

Contact Us: admin [ a t ] ucptt.com