Con la puesta en práctica de la norma C99, un avance se hace en cuanto a la gestión de la memoria: la declaración de array dinámica (variable-length arrays in english).
Me dirá, conozco la array, declaro una array de diez totalidades calculando las dimensiones con una constante del siguiente modo: int iArray [10]. Las array dinámicas, ok conozco, declaro a un indicador luego yo hago un malloc o calloc para calcularla las dimensiones con una variable, en no olvidando liberar la memoria asignada con un free al final del tratamiento.
¿Entonces que son las variable-length arrays? Es la posibilidad de declarar array indicando dimensiones con variables y no solamente con constantes. A continuación, dos ejemplos para ilustrar la utilización de una array dinámica: se pide al usuario calcular las dimensiones de una array que él mismo asignará, luego se indica el contenido de esa array.
ANTES
int iRows, iCols;
int i, j;
int *piArray = NULL;
printf("Número de líneas: ");
scanf("%d", &iRows);
printf("Número de columnas: ");
scanf("%d", &iCols);
*piArray = (int*)malloc(iRows*iCols*sizeof(int));
if (piArray != NULL)
{
__for (int i = 0; i < iRows;i++)
__{
____for (int j = 0; j
______piArray [i][j] = i*iCols+ j;
______printf("%d ", piArray [i][j]);
____}
____printf("\n");
__}
}
free(piArray );
piArray = NULL;
AHORA
En el código siguiente, se utiliza también otra novedad del C99: la declaración de las variables no será ya al principio de los bloques {}.
int iRows, iCols;
int i, j;
printf("Número de líneas: ");
scanf("%d", &iRows);
printf("Número de columnas: ");
scanf("%d", &iCols);
int tiArray [iRows][iCols];
for (int i = 0; i < iRows; ++i)
{
__for (int j = 0; j < iCols; ++j)
__{
____tiArray[i][j] = i*iCols+ j;
____printf("%d ", tiArray[i][j]);
__}
__printf("\n");
}
Aquí, la liberación de la memoria asignada a tiArray se efectúa al final de "vida" de esta variable. Como tiArray es una variable local, es liberada al final del tratamiento de la función en la cual se declara.
🌐 www.ajolly.com.mx
No hay comentarios.:
Publicar un comentario