Otra característica de la gestión dinámica de memoria en C
es que la inicialización de la memoria se realiza sólo si así se solicita
mediante la llamada a la función calloc
. En otras palabras,
cuando se reserva una porción de memoria mediante una llamada a
malloc
, esa porción es visible al programa con su contenido
intacto. Es decir, que no se inicializa a ningún valor en particular. Lo más
probable es que contenga restos de la información que se ha almacenado
previamente.
Este comportamiento está pensado para poder obtener el mayor
rendimiento de un programa. A menudo hay porciones de memoria que se
solicitan, pero que a continuación se inicializan desde el propio programa a
unos valores concretos. En este caso, si malloc
inicializase la
memoria, se haría esta tarea dos veces, con la consiguiente pérdida de
tiempo. Por este motivo, sólo la función calloc
realiza esta
tarea. Como ejemplo, en la siguiente porción de código se intenta mostrar
por pantalla como cadena de texto la basura que haya quedado almacenada en
esa zona de memoria.
char *string; string = (char *)malloc(100); printf("%s\n", string);