C-队列未正确存储值



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

然而,在尝试从队列中的结构读取值时,我会遇到一些奇怪的行为。下面代码段的末尾打印value1value5作为调试检查,以确保这些值是正确的。它应该在第一次迭代中打印头和尾的struct1->value1struct1->value5,然后在第二次迭代中为头打印struct1->value1struct1->value5,为尾打印struct2->value1struct2->value5,但它却为头和尾打印奇怪的大值。(另外,它似乎完全忘记了第一个结构。)我做错了什么?

Sample 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 %dn", itemHead->value1, itemHead->value5);
Item *itemTail = queue_peek_tail(processQueue);     //...from this
printf("Tail: %d %dn", 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

这:

queue_push_tail(itemQueue, &newItem);

看起来不太对劲,它与您从队列中查看项目的方式不匹配。如果队列存储指针,则将其交给newItem,而不是newItem的地址。

相关内容

  • 没有找到相关文章

最新更新