从C中的其他函数中释放指针

前端之家收集整理的这篇文章主要介绍了从C中的其他函数中释放指针前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑c代码
void mycode() {
  MyType* p = malloc(sizeof(MyType));
  /* set the values for p and do some stuff with it */
  cleanup(p);
}


void cleanup(MyType* pointer) {
  free(pointer);
  pointer = NULL;
}

我错了,认为清理后(p);被调用,p的内容现在应该是NULL吗?会清理(MyType *指针)是否正确释放内存分配?

我正在编码我的大学作业,并发现调试器仍然显示指针,以便我有一个内存地址而不是0x0(或NULL).

我在C中发现内存管理非常复杂(我希望不只是我).有什么可以照亮发生的事情吗?

解决方法

是的,会正确释放内存.

清理功能中的指针是局部变量;在本地存储的值传递给该函数的副本.

这可能会增加您的混淆,但您可以从mycode方法调整变量p的值,如下所示:

void cleanup(MyType** pointer) {
  free(*pointer);
  *pointer = NULL;
}

在这种情况下,指针存储指针的地址.通过取消引用,您可以更改存储在该地址的值.

我会注意到,在软件的相同逻辑“级别”处理分配和释放通常是一个很好的做法 – 即不要让调用者有责任分配内存,然后将其释放到函数内.保持一致并处于同一水平.

猜你在找的C&C++相关文章