Si free () conoce la longitud de mi matriz, ¿por qué no puedo solicitarla en mi propio código?

Sé que es una convención común pasar la longitud de las matrices asignadas dinámicamente a las funciones que las manipulan:

void initializeAndFree(int* anArray, size_t length);

int main(){
    size_t arrayLength = 0;
    scanf("%d", &arrayLength);
    int* myArray = (int*)malloc(sizeof(int)*arrayLength);

    initializeAndFree(myArray, arrayLength);
}

void initializeAndFree(int* anArray, size_t length){
    int i = 0;
    for (i = 0; i < length; i++) {
        anArray[i] = 0;
    }
    free(anArray);
}

pero si no hay forma de obtener la longitud de la memoria asignada de un puntero, ¿cómofree() "Automáticamente", ¿sabe qué asignar cuando todo lo que le doy es el mismo puntero? ¿Por qué no puedo entrar en la magia como programador en C?

Donde hacefree() obtener su conocimiento gratis (har-har)?

Respuestas a la pregunta(9)

Su respuesta a la pregunta