Índice

Asignación dinámica de tablas

Tabla:asignación dinámica

1. Asignar dinámicamente una tabla con un puntero

Tabla:asignar dinámicamente con un puntero

A continuación se muestra una asignación dinámica para un entero:

int *ptr; 
    ptr=(int*)malloc(sizeof(int) );

lo que es idéntico a:

ptr=(int*)malloc(sizeof(int) * 1);

Si ptr contiene la dirección del primer elemento de la tabla de 1 elemento, se puede escribir indiferentemente:

*ptr=10; 
// o 
ptr[0]=10;

Ambas notaciones son equivalentes.

Y para tener más de un elemento en la tabla, basta con asignar más memoria, proporcionalmente al número de elementos. Por ejemplo, para tener una tabla de 16 enteros:

int *ptr 
    ptr=(int*)malloc(sizeof(int)*16);

El recorrido de la tabla es el habitual:

int i, 
    for (i=0; i<16; i++){ 
        ptr[i]=rand()%100;                 // inicialización 
        printf("ptr[%d]=%d",i, ptr[i]);    // visualización 
    }

También es posible obtener el tamaño de la tabla de forma aleatoria:

int*ptr, tam; 
    tam=rand(); 
    ptr=(int*)malloc(sizeof(int)*tam);

Si se teme que haya un desbordamiento de la memoria RAM en el momento de la asignación, se puede controlar el retorno de la función malloc(), que devuelve NULL si no se ha podido realizar la operación solicitada. Por ejemplo:

ptr=(int*)malloc(sizeof(int)*tam; 
if ( ptr==NULL) 
    exit(EXIT_FAILURE);

En caso de error, el programa finaliza con EXIT_FAILURE como valor de retorno (EXIT_FAILURE ...