C编程 - 将指针返回到释放状态

Kev*_*ith 3 c memory-leaks

我有一个函数foo(),它分配内存并返回它.我的标准做法是在我的主要功能结束时释放它吗?

char* foo(){
 char * p;

 p = malloc(sizeof(char) * 4); /* edit - thanks to msg board */
 p[0] = 'a';
 p[1] = 'b';
 p[2] = 'c';
 p[3] = '/0'; /* edit: thanks to the msg board. */

 return p;
}

int main(int argc, char *argv[])
{
 char * p2;

 p2 = foo();

 printf("%s", p2);    

 free(p2);

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

Car*_*rum 6

在结束时解放main()将是正确的事情,是的.但是,您可能会考虑使用null来终止该字符串.对于所有"同一级别"的内存管理,可以说更为惯用的设计.就像是:

void foo(char *p)
{
  p[0] = 'a';
  p[1] = 'b';
  p[2] = 'c';
  p[3] = '\0';
}

int main(int argc, char **argv)
{
  char *p2 = malloc(4);
  foo(p2);
  printf("%s", p2);
  free(p2);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)