在 C 中,在释放函数返回的内存时,这是更好的做法:
- 提供一个“析构函数”来封装对 free() 的调用。
- 要求用户自己 free() 返回的指针。
例如,要打开和关闭文件,我们执行以下操作:
FILE* f = fopen("blah", "w");
fclose(f);
这是否优于:
FILE* f = fopen("blah", "w");
fclose(f);
free(f);
Warning:不要对 FILE 指针调用 free()。我在这里仅使用它作为假设的实现。
那么局部变量指向返回的内存的情况又如何呢? free() 这里有害吗? (或者也许永远不应该这样做)
FILE f = &fopen("blah", "w");
fclose(&f);
分配和释放内存的最佳选择是对称进行。即,如果调用者分配了内存,则让调用者释放它。如果您的 API 分配了内存(被调用者),那么您的 API 应该释放它。
调用者分配/释放的示例:
int * mymem = (int *)malloc(20 * sizeof(int));
...
a_func_to_call(mymem);
...
free(mymem);
被调用者分配/释放的示例:
FILE* f = fopen("blah", "w"); // allocs a FILE struct
fclose(f); // The implementation of fclose() will do what's necessary to
// free resources and if it chooses to deallocate any memory
// previously allocated
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)