指向指针的可用内存 - C析构函数

时间:2015-09-05 06:12:18

标签: c pointers memory-management memory-leaks

如果我有下一个功能

Stack *construct_stack(void) {
  Stack *instance = (Stack *) malloc(sizeof(Stack));

  // Stuff...

  return instance;
}

它是"构造函数"。但是我一直在使用"析构函数"。

如果我这样做,我会收到错误。

void destruct_stack(Stack **st) {
  // Stuff...

  free(st);
}

有些想法?

2 个答案:

答案 0 :(得分:3)

void destruct_stack(Stack **st) {
  // Stuff...

  free(*st);//free the pointer which st points to
  *st = NULL;//set it to null
}

而且你不需要施放malloc的结果:Do I cast the result of malloc?

答案 1 :(得分:2)

void destruct_stack(Stack **st)

这里st是指向内存的指针(即instance)的指针(st保存指针instance的地址)。

 free(st); // you didn't allocate memory to st therefore gives error

所以你应该像这样免费*st

   free(*st);
   *st=NULL;  // just a good practice 

或者用指针的地址代替另一种方式(即&instance)你可以传递指针instance本身然后free它但是你需要改变参数的类型传递给函数。