我有一个像这样的.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"退出函数后)。
感谢。顺便说一下,我的第一次发帖,如果有人可以告诉我如何发布代码而不搞砸它,那也会有所帮助。