私は、データへのポインタを格納するためにC(Linked Listを使用)でQueueを実装しようとしています。 en-queuingは正常に動作しているようですが、de-queuing時のポインタに関するいくつかの問題があります。C pointer shenanigans
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;
}
、それが思われるループのメインで*データポインタの値() dequeue()に設定されている値は保持されません。私は何が欠けていますか?
編集:
struct queue_node
{
struct queue_node *next;
void* data;
};
struct queue
{
struct queue_node *first;
struct queue_node *last;
};
あなたの 'queue'と' queue_node'構造の定義を共有するのに気をつけてください、あるいはその質問のゲームの一部でしょうか? _Update_:ありがとう! –
また、なぜあなたは 'free(tmp)'をしますか?それがmalloc()のメモリへの有効なポインタであることを保証できますか? –
以下の答えのように、結果を適切なものに割り当てることはできません。あなたは 'void *'を返そうとするので、あなたの引数は 'void ** pp'でなければならず、' * pp = q-> first-> data'を割り当てます。 –