C内存分配,释放后覆盖

时间:2018-09-30 23:11:50

标签: c pointers memory free

我一直在讨论有关内存分配的问题,特别是free()语句之后会发生什么。因此,例如,当我释放a然后更改其地址时,a仍会具有其旧值还是会获得b的地址?释放后,由于我对其进行了调整,它会变成悬挂指针吗?输出是否只是具有相同值z-20和w = 9的a和b? 我将不胜感激。非常感谢你!

int* t = (int*) malloc(sizeof(int)); 
int* b = (int*)    malloc(sizeof(int)); 
int* a = (int*) malloc(sizeof(int)); 
int w;
int z;

*a = 11;
*b = 9;
z = *a + *b; 
w = *b;
*a = z; 
free(a);

*t = 4;
b = &z;
a = b; 
free(t);

printf("Printed results are:\n");
printf("*a=%d, *b=%d, z=%d, w=%d\n", *a, *b, z, w);

1 个答案:

答案 0 :(得分:1)

  

当我释放a然后更改其地址时,a仍会保留其旧值还是会获得b的地址

它将在b中获得指针值,这是z的地址。

在将b重新分配给z的地址之前,代码应释放b:

free(b);
b = &z;

否则,我看不到代码有问题,因为它似乎没有取消引用任何释放的指针。

  

输出

这就是您所期望的:

*a=20, *b=20, z=20, w=9