我想在C中實現一個隊列(使用this implementation),其中,給定一個輸入文件,每行包含5個值的行數,爲該行創建一個結構Item
,值被分配給結構變量value1
... value5
。然後將該結構放置在一個隊列中,這樣文件的第一行就是隊列中的第一個結構,最後一行將是最後一個結構。C - 隊列沒有正確存儲值
但是,在嘗試從隊列中的結構中讀取值時,我遇到了一些奇怪的行爲。下面代碼段的結尾打印value1
和value5
作爲調試檢查,以確保值是正確的。它應該在第一次迭代中打印struct1->value1
和struct1->value5
,然後在第一次迭代中打印struct1->value1
和struct1->value5
,在第二次迭代中打印struct2->value1
和struct2->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 %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
'queue_push_tail(itemQueue,newItem);'注意被推入的值。 – WhozCraig