Will the free()
routine work if I dynamically allocate an array and then pass, not the initial pointer, but a pointer to the middle of the array? Example:
int* array = malloc(10 * sizeof *array);
if(array) {
array += 5; // adjusting the indicies
free(array);
}
Or do I need to set the pointer back to the start of the array before calling free()
?
Absolutely not. The value passed to free()
must be exactly the same value returned by malloc()
. In fact, to ensure this is the case, I would recommend you use a copy of the pointer if you need a pointer you can increment or otherwise modify.
(And "Yes", you do need to "set it back".)
The API requires that you only pass to free()
exactly what you got from malloc
()1.
1. Or a null pointer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With