The behavior of realloc(3) with zero size was apparently implementation
defined. While glibc documents the behavior as equivalent to free(3),
that might not apply to other C libraries. With C17, this behavior has
been deprecated, and with C23, the behavior is now undefined. It's also
why valgrind warns about this use.
Hence, when array_compress() would call realloc() with a zero size, we
now call free() explicitly and set the pointer to NULL.
Signed-off-by: Thomas Egerer <thomas.egerer@secunet.com>
}
if (tail)
{
- array->data = realloc(array->data, get_size(array, array->count));
+ size_t size = get_size(array, array->count);
+
+ if (size)
+ {
+ array->data = realloc(array->data, size);
+ }
+ else
+ {
+ free(array->data);
+ array->data = NULL;
+ }
array->tail = 0;
}
}