C - 队列未正确存储值

时间:2014-03-02 20:17:19

标签: c memory struct queue malloc

我正在尝试在C中实现一个队列(使用this implementation),其中,给定一个输入文件,其中每行包含5个值,为该行创建结构Item值被分配给结构变量value1 ... value5。然后将结构放在队列中,因此文件的第一行将是队列中的第一个结构,最后一行将是最后一个结构。

但是,当我尝试从队列中的结构中读取值时,我会遇到一些奇怪的行为。下面的代码段末尾打印value1value5作为调试检查,以确保值正确。它应该在第一次迭代时针对头部和尾部打印struct1->value1struct1->value5,然后针对头部struct1->value1struct1->value5struct2->value1打印struct2->value5Sample file: 1 0 10 1 3 2 0 10 10 1 ------------ /* read input file */ /* while the current line of the file is not null */ ... /* create new item */ Item *newItem = malloc(sizeof(Item)); /* string tokenizer */ /* adds tokens from current line to tokens[i] */ ... /* set item variables */ newItem->value1 = strtol(tokens[0], NULL, 10); //should contain e.g. 1 newItem->value2 = strtol(tokens[1], NULL, 10); //should contain e.g. 0 newItem->value3 = strtol(tokens[2], NULL, 10); //should contain e.g. 10 newItem->value4 = strtol(tokens[3], NULL, 10); //should contain e.g. 1 newItem->value5 = strtol(tokens[4], NULL, 10); //should contain e.g. 3 /* add to item queue */ queue_push_tail(itemQueue, &newItem); /* check queue values */ if(!queue_is_empty(itemQueue)) { //after two lines, Item *itemHead = queue_peek_head(itemQueue); //this should differ... printf("Head: %d %d\n", itemHead->value1, itemHead->value5); Item *itemTail = queue_peek_tail(processQueue); //...from this printf("Tail: %d %d\n", itemTail->value1, itemTail->value5); } 对于第二次迭代的尾部,但是它会为头部和尾部打印奇怪的大值。 (另外,它似乎完全忘记了第一个结构。)我在这里做错了什么?

Head: 1 3   //when first line is read
Tail: 1 3
Head: 1 3   //when second line is read
Tail: 2 1

预期产出:

Head: 146752 -4196581   //when first line is read
Tail: 146752 -4196581
Head: 146792 -4196581   //when second line is read
Tail: 146792 -4196581

实际输出:

{{1}}

1 个答案:

答案 0 :(得分:1)

此:

queue_push_tail(itemQueue, &newItem);

看起来不正确,它与您从队列中查看项目的方式不符。如果队列存储指针,请将其移至newItem,而不是newItem的地址。

相关问题