如果我有下一个功能
Stack *construct_stack(void) {
Stack *instance = (Stack *) malloc(sizeof(Stack));
// Stuff...
return instance;
}
它是"构造函数"。但是我一直在使用"析构函数"。
如果我这样做,我会收到错误。
void destruct_stack(Stack **st) {
// Stuff...
free(st);
}
有些想法?
答案 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
它但是你需要改变参数的类型传递给函数。