0
我試圖將int變量添加到此fifo。 fifo.c將元素添加到fifo隊列
但我只看到同樣的VAR(這是最後的VAR)
fifo_t *ff = fifo_new();
for (int i =0; i<4; i++) {
int *k = malloc(sizeof(int));
*k = rand();
printf("%d %p!\n", *k, k);
fifo_add(ff, k);
free(k);
}
fifo_iter(ff, my_callback, NULL);
如果我創建堆棧INT var和添加到FIFO這樣
int x =0;
fifo_add(ff, (void *)x);
x = 2;
fifo_add(ff, (void *)x);
x = 3;
fifo_add(ff, (void *)x);
是工作罰款,但我有警告 - 「投給指針從不同大小的整數」
我做錯了什麼?最好的祝福。
編輯: 我在fifo.c中找到了用於銷燬fifo隊列中所有元素的函數。對於我的例子,你需要調用fifo_free(of,NULL);如果您將自定義結構添加到隊列中,則需要編寫一些用於銷燬結構的函數,並將其放入fifo_free的第二個參數中。和
TY爲@JonathanLeffler其他評論員
這兩個不相等。 'fifo_add(ff,(void *)x);'添加一個int值。 'fifo_add(ff,k);'添加一個指向int值的指針。那麼你真的試圖存儲一個int或一個int指針嗎? – kaylum
你在做錯的一件事是在循環中調用'free()'。看看'fifo.c'中的代碼;它將指針複製到結構中(它不能複製數據,因爲它沒有告訴數據有多大)。所以,你一直通過分配內存來濫用內存,將指針複製到FIFO中,然後釋放它。每次分配時你可能會得到相同的內存,所以每個新的條目都會踐踏前一條。將'free()'移動到一個單獨的循環 - 或者一個新的回調函數。 –
我試圖存儲指針。我知道他們不相同:) – Max