从指向指针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)代码>