私はC言語の新機能ですが、まだ完全に理解しようとしています。私はスタック を実装しましたが、デストラクタとコンストラクタ/ initを作成するときに問題が見つかりました。 これらはうまくいっていますか? これらは、スタックによって使用される構造のためのtypedefです:デストラクタと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);
}
私の質問は:彼らはよくやっていますか?適切な経験を持つ人はどのようにそれをしますか?
コンストラクタがポインタ引数を取る必要がある特別な理由はありますか?通常、ポインタを取るコンストラクタは、実際には*メモリを割り当てないので、構造体内の変数をデフォルト値に初期化する*ため、実際には "初期化子"です。 –
コンパイラはこのコードについて何を伝えますか?特に 'free((* stack) - > top);'? – EOF
たくさんのスタックを作りたい – patrol