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