Если free () знает длину моего массива, почему я не могу запросить его в своем собственном коде?

Я знаю, что принято передавать длину динамически распределенных массивов функциям, которые ими управляют:

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

но если у меня нет возможности получить длину выделенной памяти из указателя, какfree() «автоматически» знаете, что делать, когда все, что я даю, это один и тот же указатель? Почему я не могу понять магию как программист на Си?

Где жеfree() получить свои бесплатные (хар-хар) знания от?

Ответы на вопрос(9)

Ваш ответ на вопрос