【发布时间】:2011-06-17 22:07:21
【问题描述】:
我正在尝试在 C 中实现一个队列(使用链接列表)来存储指向数据的指针。入队似乎工作正常,但出队时的指针有些麻烦。
在我的 main() 中:
void* data = malloc(sizeof(int));
dequeue(&Q, data);
printf("(%d) %d\n", k, *(int*)data);
出队():
int dequeue(struct queue *q, void *value)
{
struct queue_node *tmp;
if (!q->first) {
value = 0;
return 1;
}
value = q->first->data;
tmp = q->first;
if (q->first == q->last)
q->first = q->last = NULL;
else
q->first = q->first->next;
free(tmp);
return 0;
}
根据我的调试,似乎 main() for 循环中 *data 指针的值没有保留它在 dequeue() 中设置的值。我错过了什么?
编辑:
struct queue_node
{
struct queue_node *next;
void* data;
};
struct queue
{
struct queue_node *first;
struct queue_node *last;
};
【问题讨论】:
-
愿意分享您对
queue和queue_node结构的定义,或者猜谜游戏是问题的一部分? 更新:谢谢! -
另外,你为什么
free(tmp)?你能保证这是一个指向 malloc() 内存的有效指针吗? -
正如在下面的答案中,您没有将结果分配给正确的东西。你想返回一个
void*,所以你的参数应该是void** pp,然后你分配*pp = q->first->data。