加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:14:15 所属栏目:百科 来源:网络整理
导读:考虑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的内容现在应该是N
考虑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;
}

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读