C free () rutina y punteros de matriz incrementada

¿Funcionará la rutina free() si asigno dinámicamente una matriz y luego paso, no el puntero inicial, sino un puntero al centro de la matriz? Ejemplo:

 int* array = malloc(10 * sizeof *array); if(array) { array += 5; // adjusting the indicies free(array); } 

¿O debo volver a establecer el puntero en el inicio de la matriz antes de llamar a free() ?

Absolutamente no. El valor pasado a free() debe ser exactamente el mismo valor devuelto por malloc() . De hecho, para asegurarse de que este sea el caso, le recomendaría que use una copia del puntero si necesita un puntero que pueda incrementar o modificar de otro modo.

No

(Y “Sí”, es necesario “restablecerlo”.)

La API requiere que solo pases a free() exactamente lo que obtuviste de malloc () 1 .


1. O un puntero nulo.