// cc -o queuetest queuetest.c -fsanitize=address -O0 -fno-omit-frame-pointer -fno-common #include #include struct Foo { int i; TAILQ_ENTRY(Foo) entries; }; TAILQ_HEAD(FooList, Foo); int main() { struct FooList flist = TAILQ_HEAD_INITIALIZER(flist); struct Foo *f1 = malloc(sizeof(struct Foo)); struct Foo *f2 = malloc(sizeof(struct Foo)); TAILQ_INSERT_TAIL(&flist, f1, entries); TAILQ_INSERT_TAIL(&flist, f2, entries); struct Foo *node = NULL; TAILQ_FOREACH(node, &flist, entries) { struct Foo *next = TAILQ_NEXT(node, entries); struct Foo *tmp = NULL; TAILQ_FOREACH_FROM_SAFE(next, &flist, entries, tmp) { TAILQ_REMOVE(&flist, next, entries); free(next); next = NULL; } } free(f1); return 0; }