gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:50:53 26 4
gpt4 key购买 nike

我对 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;
}

freeStack应该接收一个堆栈指针作为参数,它不需要双重间接。

void freeStack(Stack *stack) {
empty(stack);
free(stack->firstOut); // This isn't done by empty()?
free(stack);
}

在释放之前无需设置stack->size,因为内存将会消失,并且它包含的值无关紧要。

关于c - C 中的析构函数和构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com