从指向指针C析构函数的指针释放内存

从指向指针C析构函数的指针释放内存,c,pointers,memory-management,memory-leaks,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); } 有什么想法吗 void

如果我有下一个函数

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

  // Stuff...

  return instance;
}
它有点像“构造器”。但我在“析构函数”上遇到了问题

如果我这样做,我会得到一个错误

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

  free(st);
}
有什么想法吗

void destruct_stack(Stack **st)
这里的
st
是指向指针的指针(即
实例
),您将内存分配给该指针(
st
保存指针
实例

所以你应该像这样释放
*st

   free(*st);
   *st=NULL;  // just a good practice 
或者用另一种方法代替指针的地址(即
&实例
),您可以传递指针
实例
本身,然后
释放它,但您需要更改传递给函数的参数类型

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

  free(*st);//free the pointer which st points to
  *st = NULL;//set it to null
}
这里的
st
是指向指针的指针(即
实例
),您将内存分配给该指针(
st
保存指针
实例

所以你应该像这样释放
*st

   free(*st);
   *st=NULL;  // just a good practice 
或者用另一种方法代替指针的地址(即
&实例
),您可以传递指针
实例
本身,然后
释放它,但您需要更改传递给函数的参数类型

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

  free(*st);//free the pointer which st points to
  *st = NULL;//set it to null
}
您不需要强制转换malloc的结果:


您不需要强制转换malloc的结果:

为什么要将指针传递给指针?只需传递一个指针并释放它。
free(*st)*st=NULL'因为我的代码看起来像这样:
Stack*s=construct_Stack();//东西销毁堆栈(&s)为什么要将指针传递给指针?只需传递一个指针并释放它。
free(*st)*st=NULL'因为我的代码看起来像这样:
Stack*s=construct_Stack();//东西销毁堆栈(&s)