从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; } 在这种情况下,指针存储指针的地址.通过取消引用,您可以更改存储在该地址的值. 我会注意到,在软件的相同逻辑“级别”处理分配和释放通常是一个很好的做法 – 即不要让调用者有责任分配内存,然后将其释放到函数内.保持一致并处于同一水平. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |