我对C很陌生,我还在努力完全理解它。我实现了一个堆栈 但是在制作析构函数和构造函数/ init时遇到了麻烦。 这些做得好吗? 这些是堆栈使用的结构的typedef:
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);
}
我的问题是:他们干得好吗?具有适当经验的人会如何做到这一点?
答案 0 :(得分:3)
newStack
应该只返回它分配的堆栈指针。它不需要接收Stack*
作为参数。
stack *newStack() {
Stack *stack = malloc(sizeof(Stack));
if (stack != NULL) { // allocation successful
stack->firstOut = NULL;
stack->size = 0;
}
return stack;
}
和freeStack
应该接收一个堆栈指针作为参数,它不需要双重间接。
void freeStack(Stack *stack) {
empty(stack);
free(stack->firstOut); // This isn't done by empty()?
free(stack);
}
在释放之前不需要设置stack->size
,因为内存将会消失并且它包含的值无关紧要。