问题
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()
?
回答1:
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.
回答2:
No
(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.
来源:https://stackoverflow.com/questions/5414549/c-free-routine-and-incremented-array-pointers