C中的析构函数和构造函数C
问题描述:
我对C非常陌生,我试图完全理解它。我实现了一个堆栈 ,但在创建析构函数和构造函数/ init时遇到了麻烦。 这些做得好吗? 这些是由堆栈中使用的结构类型定义:C中的析构函数和构造函数C
typedef struct Node{
void* cargo;
struct Node* next;
}Node;
typedef struct Stack{
int size;
Node* firstOut;
}Stack;
而这些功能:
void newStack(Stack* stack){
stack = (Stack*)malloc(sizeof(Stack));
stack->firstOut = NULL;
stack->size = 0;
}
void freeStack(Stack** stack){
empty((*stack));
free((*stack)->top);
(*stack)->size = 0;
free(stack);
}
我的问题是:他们做得好?具有适当经验的人会如何做到这一点?
答
newStack
应简单地返回它分配的堆栈指针。它不需要收到Stack*
作为参数。
stack *newStack() {
Stack *stack = malloc(sizeof(Stack));
if (stack != NULL) { // allocation successful
stack->firstOut = NULL;
stack->size = 0;
}
return stack;
}
and freeStack
应该接收一个堆栈指针作为参数,它不需要双重间接。
void freeStack(Stack *stack) {
empty(stack);
free(stack->firstOut); // This isn't done by empty()?
free(stack);
}
没有必要释放之前设置stack->size
,由于存储器即将消失,它包含的值是不相关的。
+0
构造函数应该在解引用结果之前检查'malloc()'的结果。 –
是否有任何特定的原因你的构造函数需要一个指针参数?通常情况下,带指针的构造函数实际上是“初始化器”,因为它们实际上不分配任何内存,只是将结构中的变量初始化为默认值。 –
你的编译器告诉你这个代码是什么?具体关于'free((* stack) - > top);'? – EOF
我想做很多堆栈 – patrol