C-在嵌套结构上免费使用



如何在下一个程序上释放'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((不会删除内存中位置的值,它只能让系统知道您已经对其进行了处理,并且可以使用和写入。

相关内容

  • 没有找到相关文章

最新更新