Ejemplo de Asignación Dinámica de Memoria en C++

Programa para practicar la asignación dinámica de memoria en C++.
Se trata de escribir un programa que realice los siguientes puntos en el orden en que se indican.
1.      Declara los siguientes punteros: un puntero a un double, un puntero a un int y un puntero a las estructuras TClientes y  TProveedores.
struct TClientes
{
       string codigo;
       string nombre;
};
struct TProveedores
{
       string codigo;
       string nombre;
};
2.      Reserva memoria dinámica para los anteriores punteros.
3.      Reserva memoria dinámica para un array de 100 TClientes.
4.      Reserva memoria dinámica para un array de 100 TClientes mediante una función a la que se le pasa el puntero declarado previamente.
5.      Reserva memoria dinámica para un array de 100 punteros a TClientes e inicializarlo con NULL.
6.      Reserva memoria dinámica para un array de 100 punteros a TClientes e inicializarlo con NULL mediante una función a la que se le pasa el puntero declarado previamente.
7.      Reserva memoria dinámica para un array de 120 de punteros a TProveedores y además reservar memoria para las 120 estructuras TProveedores.
8.      Destruye el array del ejercicio 4.
9.      Destruye el array del ejercicio 4 mediante una función a la que se le pasa dicho array
10.  Destruye el array del ejercicio 7.
11.  Destruye el array del ejercicio 7 mediante una función a la que se le pasa dicho array

El código del programa es el siguiente:

//Ejemplo de asignación dinámica de memoria en C++
#include <iostream>
#include <iomanip>
using namespace std;
struct TClientes
{
       string codigo;
       string nombre;
};
struct TProveedores
{
       string codigo;
       string nombre;
};  
void reserva1(TClientes *&); 
void reserva2(TClientes **&);
void destruye1(TClientes *&);
void destruye2(TProveedores **&);
int main()
{
    int x;
   
    // 1. Declara los siguientes punteros: un puntero a un double,
    // un puntero a un int y un puntero a las estructuras TClientes y 
    // TProveedores
   
    double *d; int *i; TClientes *tc; TProveedores *tp;
   
    // 2. Reserva memoria dinámica para los anteriores punteros.
   
    d = new double;
    i = new int;
    tc = new TClientes;
    tp = new TProveedores;
   
    // 3. Reserva memoria dinámica para un array de 100 TClientes.
   
    tc = new TClientes[100];
   
    // 4. Reserva  memoria   dinámica   para   un   array   de   100   TClientes
    // mediante   una función a la que se le pasa el puntero
    // declarado previamente.
   
    reserva1(tc);
   
    // 5. Reserva  memoria   dinámica   para   un   array   de   100   punteros
    // a  TClientes e inicializarlo con NULL.
   
    TClientes **tc1;
    tc1 = new TClientes *[100];
    for(x = 0; x < 100; x++)
        tc1[x] = NULL;
       
    // 6. Reserva  memoria   dinámica   para   un   array   de   100   punteros
    // a  TClientes e inicializarlo  con NULL  mediante una  función a  la
    // que  se  le pasa  el  puntero declarado previamente.
   
    reserva2(tc1);
   
    // 7. Reserva memoria dinámica para un array de 120 punteros
    // a TProveedores y además reservar memoria para
    // las 120 estructuras TProveedores.
   
    TProveedores **tp1;
    tp1 = new TProveedores *[120];
    for(x=0; x<120; x++)
        tp1[x] = new TProveedores;
       
    // 8. Destruye el array del ejercicio 4.
   
    delete [] tc;
   
    // 9. Destruye el array del ejercicio 4 mediante
    // una función a la que se le pasa dicho array
   
    reserva1(tc); //volvemos a reservar memoria para que se pueda liberar
    destruye1(tc);
   
    // 10. Destruye el array del ejercicio 7.
   
    for(x=0; x<120; x++)
        delete tp1[x];
    delete [] tp1;
   
    // 11. Destruye el array del ejercicio 7 mediante
    // una función a la que se le pasa dicho array
   
    //volvemos a reservar memoria para que se pueda liberar
    tp1 = new TProveedores *[120];   
    for(x=0; x<120; x++)
         tp1[x] = new TProveedores;
    destruye2(tp1);
   
    system("pause");
}
void reserva1(TClientes *&p)
{
     p = new TClientes[100];
}
void reserva2(TClientes **&p)
{
     p = new TClientes *[100];
     for(int x = 0; x < 100; x++)
          p[x] = NULL;
}
void destruye1(TClientes *&p)
{
     delete [] p;
}
void destruye2(TProveedores **&p)
{
     for(int x=0; x<120; x++)
         delete p[x];
     delete [] p;
}

2 comentarios:

  1. Este programa es lo mismoq ue decir Programacion paginada?

    ResponderEliminar
  2. me podría explicar como se funciona para exponer

    ResponderEliminar