Se free () sabe o tamanho da minha matriz, por que não posso solicitá-la no meu próprio código?

Eu sei que é uma convenção comum passar o comprimento de matrizes alocadas dinamicamente para funções que as manipulam:

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);
}

mas se não há como obter o comprimento da memória alocada de um ponteiro, comofree() "automagicamente" sabe o que desalocar quando tudo o que estou dando é o mesmo ponteiro? Por que não consigo entrar na mágica como programador em C?

Ondefree() obter seu conhecimento gratuito (har-har)?

questionAnswers(9)

yourAnswerToTheQuestion