// 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; struct Foo *tmp1 = NULL; TAILQ_FOREACH_SAFE(node, &flist, entries, tmp1) { struct Foo *next = TAILQ_NEXT(node, entries); struct Foo *tmp2 = NULL; TAILQ_FOREACH_FROM_SAFE(next, &flist, entries, tmp2) { TAILQ_REMOVE(&flist, next, entries); free(next); next = NULL; } } free(f1); return 0; }