我一直在讨论有关内存分配的问题,特别是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);
答案 0 :(得分:1)
当我释放a然后更改其地址时,a仍会保留其旧值还是会获得b的地址
它将在b中获得指针值,这是z的地址。
在将b重新分配给z的地址之前,代码应释放b:
free(b);
b = &z;
否则,我看不到代码有问题,因为它似乎没有取消引用任何释放的指针。
输出
这就是您所期望的:
*a=20, *b=20, z=20, w=9