【发布时间】:2016-09-09 00:09:06
【问题描述】:
我对 C 语言非常陌生,但我正在努力完全理解它。我实现了一个堆栈 但是在制作它的析构函数和它的构造函数/初始化时发现了麻烦。 这些做得好吗? 这些是堆栈使用的结构的 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);
}
我的问题是:他们做得好吗?有适当经验的人会怎么做?
【问题讨论】:
-
你的构造函数需要一个指针参数有什么特别的原因吗?通常,采用指针的构造函数实际上是“初始化器”,因为它们实际上并不分配任何内存,而只是将结构内的变量初始化为其默认值。
-
你的编译器告诉你关于这段代码的什么?特别是关于
free((*stack)->top);? -
我想做很多叠
-
“但发现麻烦”。请更具体地告诉我们您遇到了什么麻烦。这种不完整的代码很难说清楚。但是
newStack看起来不对。stack对函数来说是本地的,所以一旦函数退出,分配给它的缓冲区就会丢失。需要传入Stack **或返回stack。 -
另外,
free(stack)看起来不对,因为它不会释放您在newStack中分配的相同内容。
标签: c initialization destructor