için öğeler ekleyin. fifo.cBu fıfo'ya int değişkenlerle eklemek çalışıyorum fifo kuyruğuna
Ama onu sadece yığınında int Var oluşturursanız (bu son var olan)
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);
aynı Var görmek ve O iştir bu
int x =0;
fifo_add(ff, (void *)x);
x = 2;
fifo_add(ff, (void *)x);
x = 3;
fifo_add(ff, (void *)x);
gibi FIFO eklemek ince ama uyarı var - Neyi yanlış ne
"farklı boyutta tamsayı gelen işaretçi döküm"? Saygılarımla.
DÜZENLEME: Ben fifo kuyruğundaki tüm unsurlarını yok etmek için fifo.c fonksiyonu buldum. Örneğim için, fifo_free (of, NULL); Özel yapınızı kuyruğa eklerseniz, yapınızı yok etmek için bir işlev yazmanız ve bunu ikinci fifo_free parametresine yazmanız gerekir.
@JonathanLeffler için ty ve diğer yorumcu
iki eşdeğer değildir. fifo_add (ff, (void *) x); 'int değeri ekler. fifo_add (ff, k); 'int değerine bir işaretçi ekler. Yani gerçekten int bir int veya bir işaretçi depolamaya çalışıyorsunuz? – kaylum
Yanlış yaptığınız bir şey, döngüde 'free()' yi çağırmaktır. 'Fifo.c' koduna bakın; işaretçiyi yapının içine kopyalar (veri ne kadar büyük olduğu söylenmediği için veriyi kopyalayamaz). Yani, belleği tahsis ederek, işaretçiyi FIFO'ya kopyalayıp sonra serbest bırakarak saklıyorsunuz. Her tahsis ettiğinizde muhtemelen aynı belleği alırsınız, bu yüzden her yeni giriş bir öncekinin üzerinde ezilir. 'Free()' i ayrı bir döngüye veya yeni bir geri arama işlevine taşıyın. –
İşaretçiyi kaydetmeye çalışıyorum. onlar eşit olmadıklarını biliyoruz :) – Max