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;
}
Este programa es lo mismoq ue decir Programacion paginada?
ResponderEliminarme podría explicar como se funciona para exponer
ResponderEliminar