2

スタックを実装しようとしていますが、不透明ポインターの使用法を理解していません。私の申告書です:

/* incomplete type */
typedef struct stack_t *stack;

/* create a new stack, have to call this first */
stack new_stack(void);

そして、これが私のスタック構造と new_stack 関数です:

struct stack_t {
    int count;
    struct node_t {
            void *data;
            struct node_t *next;
    } *head;
};

stack new_stack(void)
{
    struct stack_t new;
    new.count = 0;
    new.head->next = NULL;
    return new;
}

私の目には、新しいスタックのアドレスを返していますが、これは new を返すことからコンパイル時にエラーをスローします。私は何を間違っていますか?

4

1 に答える 1

3

stack_tas 値を返していますstack_newが、関数の戻り値の型stackは ですtypedef struct stack_t* stack
ポインターを返す必要があります-動的割り当てstack_tを使用して、スタックからヒープへの割り当てを変更します。スタックは動的に割り当てられるようになったため、不要になったときにスタック を記憶しないでください。malloc
free()

stack new_stack(void)
{
    struct stack_t* new = malloc(sizeof(struct stack_t));
    new->count = 0;
    new->head = NULL;
    return new;
}
于 2015-04-25T22:38:35.190 に答える