Я пытаюсь реализовать очередь в C (используя связанный список) для хранения указателей на данные.Кажется, что работа в очереди работает нормально, но есть некоторые проблемы с указателями при выходе из очереди.
В моем main ():
void* data = malloc(sizeof(int));
dequeue(&Q, data);
printf("(%d) %d\n", k, *(int*)data);
dequeue ():
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 не сохраняет значение, установленное в dequeue ().Чего мне не хватает?
Редактировать:
struct queue_node
{
struct queue_node *next;
void* data;
};
struct queue
{
struct queue_node *first;
struct queue_node *last;
};