如何在下一个程序上释放'V struct'?
#include <stdio.h>
#include <stdlib.h>
struct Quaternion{
double r;
struct Q_vec{
double x;
double y;
double z;
} v;
};
int main(void){
struct Quaternion* q1Ptr = malloc(sizeof(struct Quaternion));
q1Ptr->r = 1.0;
q1Ptr->v.x = 2.0;
q1Ptr->v.y = 2.0;
q1Ptr->v.z = 2.0;
printf("%s = (%f, %f, %f, %f)n", "q1", q1Ptr->r, q1Ptr->v.x, q1Ptr->v.y, q1Ptr->v.z);
free(q1Ptr);
printf("%s = (%f, %f, %f, %f)n", "q1", q1Ptr->r, q1Ptr->v.x, q1Ptr->v.y, q1Ptr->v.z);
//Doesn't prints 'r', but prints x, y and z.
}
输出为:
Q1 =(1.000000,2.000000,2.000000,2.000000(
Q1 =(0.000000,2.000000,2.000000,2.000000(
因此,我没有删除指针v。
另外,我的分配还可以吗?
编辑:谢谢您的所有回复!
这只是实际程序的一小部分,我没有在释放指针后尝试使用指针。我只是注意到内存的持久性,想知道我是否有内存泄漏以及如何避免。
您有误解。free()
不需要清除分配的内存内容,并且free()
不会更改指针q1Ptr
指向的内存中的地址。free()
只是将资源返回操作系统(或将内存分配给您的任何内容(。分配给该变量的值可以持续存在,并且不能保证由free()
归零。您仍在查看free()
调用后分配的一些值的事实并不意味着free()
调用失败。
但是,使用已 free
d的内存指针会导致不确定的行为,因为它仍指向您已分配的内存,但它不再是您的使用或访问。在您的系统中,这一次似乎还可以,但是您不能依靠它。
您无法访问释放它后释放的变量。free((不会删除内存中位置的值,它只能让系统知道您已经对其进行了处理,并且可以使用和写入。