La implementación subyacente de malloc
o new
hay que tener inevitablemente un seguimiento del tamaño de la memoria asignada para la variable. Desafortunadamente, no hay una forma estándar de obtener el tamaño del bloque asignado. La razón se debe al hecho de que no todos los bloques de memoria se asignan dinámicamente, por lo que tener la función que solo funciona para la asignación dinámica no es tan útil.
void fillwithzero(int* array) {
unsigned int size = getsize(array); // return 0 for statically allocated array ??
for(int i = 0; i < size; i++) {
array[i] = 0;
}
}
Digamos que tenemos getsize
función que es capaz de mágicamente obtener el tamaño de la matriz asignada dinámicamente. Sin embargo, si envía un puntero de una matriz estática o una matriz asignada por otros medios (por ejemplo, una función externa) al fillwithzero
, esta función no funcionará. Esa es la razón por la cual la mayoría de las funciones C que aceptan matrices requieren que la persona que llama envíe el tamaño o el tamaño máximo de la matriz junto con la matriz misma.