我应该在哪里释放函数内存?

Wil*_*hin 6 c coding-style

我正在用C语言编写一个shell.虽然我不希望其他人使用它,但我还是想练习编写可维护且组织良好的代码.我在一些函数中注意到了以下模式,所以在它固化之前,我希望它能够经过全面审查.

例如,请考虑以下功能:

int foo(int param...) {
  // declare variables
  struct bar *a, *b, *c;

  // do some work
  a = bar_creator();
  b = bar_modifier(a);
  c = bar_modifier(b);

  // cleanup
  free(a);
  free(b);
  free(c);

  return 1;
}
Run Code Online (Sandbox Code Playgroud)

注意事项:

  • 三个阶段:声明,启动/修改,清理

  • 新分配的结构通常从函数返回,作为其他对象的修改副本

  • 不需要大量的对象,因此内存使用不是问题

目前,这三个部分相对不同.这允许我匹配第一个和最后一个部分并确保一切都被考虑在内.现在我想知道一个更好的风格是否可以在不需要时立即解除分配.这样做的动机可能是最小化代码部分有意义的上下文.

您对资源重新分配的方法是什么?给定策略的优点是什么?

编辑

澄清关于函数行为的任何混淆:

/**
* returns a newly created bar
*/
struct bar *bar_creator();

/**
* takes a bar, and returns a _new_ copy of it that may have been modified.
* the original is not modified.
*/
struct bar *bar_modifier(struct bar *param);
Run Code Online (Sandbox Code Playgroud)

Luc*_*eis 1

为什么要释放3次?

如果bar_creator()是唯一动态分配内存的函数,则只需释放指向该内存区域的指针之一