C中的析构函数和构造函数

Destructor and constructor in C

我是 C 的新手,我正在尝试完全理解它。我实现了一个堆栈 但是在构造它的析构函数时发现了麻烦 constructor/init。 这些做得好吗? 这些是堆栈使用的结构的类型定义:

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 应该只是 return 它分配的堆栈指针。它不需要接收 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,因为内存即将消失,它包含的值无关紧要。