Vector dinámico con malloc en C

En muchas ocasiones no podemos saber a priori el espacio que vamos a necesitar para nuestras estructuras de datos. Esto deberá decidirse en tiempo de ejecución y llevarse a cabo mediante funciones de gestión de memoria como malloc, calloc, u otras similares.

Ejemplo malloc C


Cuando pedimos memoria con alguna función de gestión (como malloc()), ésta nos devuelve un puntero. En compiladores ANSI, este puntero es de tipo void. Como void es un tipo genérico que apunta a “cualquier cosa”, tendremos que indicar al compilador que haga una conversión de tipo (cast) al tipo de datos que nos interese; es decir, a un puntero al tipo de datos que queramos.

En nuestro ejemplo vamos a reservar memoria para un vector de enteros de 10 elementos, por ello será necesario indicarle a la función que llamemos para pedir memoria el número de bytes que necesitamos. En C, el número de bytes que se necesitan para almacenar cada tipo de datos es dependiente de la máquina sobre la que ejecutemos el programa. Por ejemplo, en dos máquinas distintas una puede requerir 2 bytes para un entero y otra utilizar 4 bytes para el mismo entero. ¿Cómo podemos decirle el número de bytes que vamos a necesitar? Utilizando la función sizeof() Así, el tamaño que queremos reservar estará en función del tamaño del tipo de datos que utilicemos.

Finalmente recorremos el array con notación de punteros, *ptr es un puntero que apunta a la primer posición del array, por eso usamos *(ptr + i) en vez de ptr[i]

void arrays_dinamicos()
{
    int *ptr, i;

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

    if (ptr==NULL)
        printf ("Error de Mem.");

    for (i=0; i<10; i++)
        ptr[i]=1;

    for(i = 0; i < 10; i++)
    {
        printf("\n %d",*(ptr+i));
    }

}
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s