gpt4 book ai didi

C内存分配,释放后覆盖

转载 作者:行者123 更新时间:2023-11-30 20:18:55 25 4
gpt4 key购买 nike

我陷入了一个有关内存分配的问题,特别是在 free() 语句之后发生的情况。例如,当我释放 a 然后更改其地址时,a 仍然具有其旧值还是会获得 b 的地址? a 会因为释放后调整它而成为悬空指针吗?输出是否只是具有相同值的 a 和 b,z-20 和 w=9?我将不胜感激任何帮助。非常感谢!

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);

最佳答案

when I free a and then change its address, will a still have its old value or will it get the address of the b

它会得到b中的指针值,即z的地址。

代码应该先释放b,然后再将其重新分配给z的地址:

free(b);
b = &z;

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

output

这正是您所期望的:

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

关于C内存分配,释放后覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52582893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com