hola vangod.
bueno pues no es tan dificil como se veo o dice con un par de practicas ya te vas dando cuenta de como funciona es cierto que habeses tienes que tener cierto cudados pero bueno en lo personal no es muy complicado.
hola Designss.
bueno ssolo agrgando algo a la informacion de codigo que te proporciono vangodp yo le agregaria calloc y realloc.
ya que calloc aparte de reservar memoria tambien te la inicializa con 0 y realloc esta redimenciona el tamaño de espacio de memoria por ejemplo si nesesitas un espacio inical de 3 y despues as adelante en tu programa de 5 solo aplicas realloc y la memoria la redmencionas a 5 espacios. aqu te dejo el codigo de vangodp con estas funciones.
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
int main () {
//======================================================================
int numeroElementos;
int * vector;// una tabla es un puntero que apunta al primer objeto de una cadena, este sera nuestro puntero
//======================================================================
printf ( "¿Cuántos elementos quieres? " ); scanf ( "%d", &numeroElementos
); //Ahora si pedimos el tamaño que va tener eso en el heap
//======================================================================
//malloc reserva la cantidad de numeroElementos multiplicado por el tamaño de un int si por
//ejemplo en nuestro ordenador un int tiene 4 bytes sera el numero que ingresemos multiplicado por 4.
//Si vamos gradar float el calculo sera numeroElementos * sizeof ( float ) y asi para todos los tipos ;)
vector
= ( int * ) malloc ( sizeof ( int ), sizeof( int ) );
//======================================================================
//calloc reserva la cantidad de numeroElementos, el tamaño de un int si por
//ejemplo en nuestro ordenador un int tiene 4 bytes sera el numero que ingresemos multiplicado por 4.
//Si vamos gradar float el calculo sera numeroElementos * sizeof ( float ) y asi para todos los tipos ;)
//a diferencia de malloc es que los dos elementos se ponen separados asi como se muestra acontinuacion
//estructura de la funcion es void *calloc(size_t nmemb, size_t size);
// en nmemb la catidad de memoria a reservar y despues d ela coma va el tipo de datos que se quiere reservar ya sea int, cloat etc
vector
= ( int * ) calloc ( sizeof ( int ), sizeof( int ) );
//lo que hace realloc es redimencionar el espacio de memoria por ejemplo con calloc inicializamos solo un espacio de tipo
//int con realloc lo ponemos redimecionar a 2, 3 , 4 etc. y si queremos redimencionar mas solo tenemos que volver a poner
// realloc con nose 6, 7, 8 etc.
// estructura de la funcion es void *realloc(void *ptr, size_t size);
// *ptr es el puntero a edireccionar en este caso vector y la coma es el numero de espacios que se quieres ocupas ya sea
//4, 5, 6, 7, 8 etc
vector
= ( int * ) realloc (vector
, 5);
//======================================================================
// Eso es muy importante ya que comprueba que se aya creado nuestra tabla, caso no se hubiera creado
//no iba a saber y entonces el programa se cerraria de forma inesperada cuando le asignamos una variable,
//como la memoria dinámica no se libera sola..
//quedaría llena con cosas que allí habíamos puesto anteriormente, si una sola variable falla al crearla
//deberías mostrar un mensaje de error y borrar todo lo anterior o bien puedes volver a intentar crear la tabla pero si no logras,
//estas obligado a liberas lo que antes habias creado antes de cerrar el programa ;)
//¡Recuerdalo! Jamas usar una tabla que no se cree correctamente o el programa se crashea ok;)
if ( vector == NULL ) {
perror ( "Problemas reservando memoria" ); }
//======================================================================
// trabajamos con el vector
//Una vez creado y comprobado lo usas de manera normal como una tabla normal solo que a esa si le ibas a poder decir el
//tamaño que tiene antes de crearla.
//======================================================================
// lo liberamos
//Como dije antes la memoria dinámica no se libera sola, debes liberarla antes, lo que no se es
//si tendrías que liberar antes a cada posición de la tabla[0],tabla[1]tabla[2]... como dije desconozco malloc y familia XD
return 0;
}
solo puedes usar malloc o calloc solas, no juntas si usas malloc no puedes usar calloc y si usas calloc no puedes usar malloc.
bueno espero que te sea util esto.
saludos.
drewermerc.