Я знаю, что это общее соглашение о передаче длины динамически распределенных массивов в функции, которые ими управляют:
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()
"автоматически" знает, что освободить, когда все, что я даю, это тот же самый указатель? Почему я не могу попасть в волшебство, как программист на C?
Где free()
получает свое бесплатное (har-har) знание из?