You could use a sentinel value to terminate your array, like null terminated strings... But then you get that whole set of problems. I don't understand why you're allocating 2x the space... But maybe I just don't know what that realloc stuff means. You should be able to shift your pointer arbitrarily and free should work as long as the address is correct. I think it's a good idea to try storing the length in "-1", maybe there's just a bug in your implementation?
post
Maybe use a flexible struct? You can have an indeterminate array at the end (https://www.geeksforgeeks.org/flexible-array-members-structure-c/) I'd rather just use the variable in the struct though. The packing isn't guaranteed to be right next to each other
all 2 comments