【发布时间】:2019-03-06 01:52:42
【问题描述】:
我被一个关于内存分配的问题困住了,特别是在 free() 语句之后会发生什么。因此,例如,当我释放 a 然后更改其地址时,a 是否仍具有其旧值,还是会获得 b 的地址?是否因为我在释放它后调整它而成为悬空指针?输出是否只是具有相同值的 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);
【问题讨论】:
-
你不能改变变量的地址。
-
你不能转换
malloc()的结果! -
b = &z;最初分配给 b 的内存不再可访问和泄漏。 -
为什么不能自己编译找到结果?
-
作为@Swordfish 评论的后续,请参阅:Do I cast the result of malloc? 请注意,
'*'通常附加到变量而不是类型。int* a, b, c;肯定不会声明三个指向int的指针。而是int *a, b, c;使这一点更加明显。