pero gracias a dios tenemos la función malloc, lo que hace esta función es devolvernos un puntero a un espacio reservado de memoria en el heap, para que podamos guardar datos. por ejemplo
en C general , windows, solaris o linux
Código: Seleccionar todo
#include <stdio.h>
#include <stdlib.h>
main()
{
char *buf;
int tamanio;
printf("Ingrese el tamaño que quiere asignar al buffer\n");
scanf("%d", &tamanio);
buf = (char *) malloc(tamanio + 1);
getchar();
free(buf);
}
En windows tenemos otra manera de manejar memoria dinamica, y a diferencia de las funciones basicas de c, en windows se pueden crear "heaps" privados.
Windows
Código: Seleccionar todo
#include <stdio.h>
#include <windows.h>
main()
{
char *buf;
int tamanio;
HANDLE heap;
heap = HeapCreate(HEAP_NO_SERIALIZE,0,9045);
printf("Ingrese el tamaño que quiere asignar al buffer\n");
scanf("%d", &tamanio);
buf =(char *) HeapAlloc(heap,0,tamanio);
printf("buffer creado\n");
scanf("%d", &tamanio);
HeapFree(heap,0,buf); /* liberamos la variable*/
HeapDestroy(heap); /*liberamos el heap completo */
}
HeapAlloc , aloca memoria de un heap privado q le pasemos por parametro, y una cant que tambien le asignamos (no debe ser mayor a la del heap creado)
HeapFree, libera variables alocadas
HeapDestroy libera un heap entero.
Nota, malloc(1024) es lo mismo que hacer HeapAlloc(GetProcessHeap,0,1024);
dado que ambos usan el heap que viene con el proceso ya creado.
Otro tema importante para ver, son las listas que se pueden hacer gracias a la memoria dinamicas.
y se manejan por nodos de informacion y un puntero, por ejemplo el primer nodo esta formado por un valor y un puntero a un nodo siguiente
y asi podemos ir armando estructuras dinamicas muy poderosas y rapidas.
espero que les sirva, saludos.
Leos