取消引用c中函数内部结构的指针

时间:2015-10-28 22:42:48

标签: c pointers

我有一个像这样的.h文件:

struct Node{
    struct Node *previous;
    struct Node *next;
    char *data;
};

struct Queue{
    struct Node *head;
    struct Node *tail;
};

int Queue_init(struct Queue *queue, struct Node *node){

    queue->head = node;
    queue->tail = node;
    return 0;
}

int Queue_push(struct Queue *queue, struct Node *node){

    node->next = NULL;
    if(queue->tail == NULL){
        queue->head = node;
        node->previous = NULL;
    } else {
        node->previous = queue->tail;
        queue->tail->next = node;
    }
    queue->tail = node;    
    return 0;
}

int Queue_pop(struct Queue *queue, struct Node *node){

    fprintf(stderr,"%s\n",node->data);
    if(queue->head == NULL){
        node->data = NULL;    
    } else{
        node = queue->head;
        if(queue->head->next == NULL){
            queue->head = NULL;
            queue->tail = NULL;
        } else {
            queue->head = queue->head->next;
            queue->head->previous = NULL;
        }
    }    
    node->previous = NULL;
    node->next = NULL;
    fprintf(stderr,"%s\n",node->data);    
    return 0;
}

我的.c文件是这样的:

int main(){
    struct Node *node_0 = malloc(3*sizeof(void*));
    node_0->data = malloc(1000*sizeof(char));
    strcpy(node_0->data, "Hello");
    struct Queue *queue_0 = malloc(2*sizeof(void*));
    Queue_init(queue_0, node_0);
    struct Node *node_1 = malloc(3*sizeof(void*));
    node_1->data = malloc(1000*sizeof(char));
    strcpy(node_1->data, "World");
    Queue_push(queue_0, node_1);
    fprintf(stderr, "%s %s\n", queue_0->head->data, queue_0->head->next->data);
    Queue_pop(queue_0, node_1);
    fprintf(stderr, "%s %s\n", node_1->data, queue_0->head->data);
    free(queue_0);
    free(node_0->data);
    free(node_0);
    free(node_1);
    free(node_1->data);
    return 0;
}

我没有使用queue_pop函数获得我想要的结果。 我得到的结果是:

Hello World
World
Hello
World World

基本上,当我从队列中弹出一些东西时,我想将它保存到函数的第二个参数中,即node_1,但事实并非如此。我相信这可能会在函数中解除引用指针。

我明白为什么我的代码无效。但我如何让它工作? (那个node_1->数据应该等于" Hello"退出函数后)。

感谢。顺便说一下,我的第一次发帖,如果有人可以告诉我如何发布代码而不搞砸它,那也会有所帮助。

0 个答案:

没有答案