当程序在不同的地方遇到错误并退出时,C 如何释放 malloc 的内存?

标签 c memory-management malloc free

我正在努力想出一种干净的方法来处理我在 C 中分配的内存。假设我有这样的东西:

void function(int arg) {
  char *foo;
  foo = (char *)malloc(sizeof(char) * 100);
  int i = func1(arg, &foo);

  char *bar;
  bar = (char *)malloc(sizeof(char) * 100);
  int j = func2(&bar);

  free(foo);
  free(bar);
}

我的问题是func1func2可能会遇到错误和exit(1),所以我需要释放foobar 发生这种情况时。

如果 func1 遇到错误,我只需调用 free(foo) 就可以了。但是如果 func2 遇到错误,我不能只调用 free(bar) 因为我还需要释放 foo。这可能会变得非常复杂,我觉得这不是处理内存的正确方法。

我在这里遗漏了什么吗?如果有人能指出正确的方向,那就太棒了。谢谢!

最佳答案

如果一个函数调用exit,你根本不需要清理你的内存使用,它会被操作系统释放。但是如果你需要释放其他资源(例如锁定文件,清理临时文件,......)那么你可以使用 atexit函数或者如果你使用 gnu libc on_exit功能来完成这项工作。

关于当程序在不同的地方遇到错误并退出时,C 如何释放 malloc 的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12479476/

相关文章:

c - "Indexed"C 中的数组函数参数

c - 在服务器上远程执行自定义命令 c windows

c++ - 修改编译后的可执行内存分配

c++ - std::string 构造函数中的内存分配/堆损坏

c - 在 C 中存储未知迭代次数的 while 循环的结果

c - 中止陷阱 : 6, 使用 memcpy 复制数组

c - Valgrind 内存泄漏修复

c - 一元 + 运算符是否进行类型转换?

cocoa - 是否有一种更节省内存的方法来搜索核心数据数据库?

c - 使用 malloc 函数的空间复杂度