【发布时间】:2016-02-14 05:14:56
【问题描述】:
在下面的代码中,指针A在调用函数copy()之前有不同的地址。一旦copy()被执行,指针A就得到了copy()中声明的指针B的地址>。因此,在 main() 内,当 free(A) 执行时,它会释放分配给 copy( )。现在的问题是如何解除分配在 main() 内的指针 A ?以下代码中是否存在内存泄漏?如何预防?
代码如下:
#define size 10
int *copy(int *A){
int i;
int *B = (int *)calloc(size,sizeof(int));
printf("address of B=%p\n",B);
for(i=0;i<size;i++){
B[i]=A[i]+1;
}
for(i=0;i<size;i++){
printf("%d ",B[i]);
}
printf("\n ");
return B;
}
int main(){
int i;
int *A = (int *)calloc(size,sizeof(int));
printf("address of A before copy()=%p\n",A);
for(i=0;i<size;i++){
A[i] = i;
}
A=copy(A);
printf("address of A after copy()=%p\n",A);
for(i=0;i<size;i++){
printf("%d ",A[i]);
}
printf("\n");
free(A);
return 0;
}
这是输出:
address of A before copy()=0x1e64010
address of B=0x1e64040
1 2 3 4 5 6 7 8 9 10
address of A after copy()=0x1e64040
1 2 3 4 5 6 7 8 9 10
【问题讨论】:
标签: c pointers memory-leaks