[问题] 指标指定给指标问题

楼主: 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