La Web del Programador: Comunidad de Programadores
 
    Pregunta:  322 - PROBLEMAS CON LA MEMORIA EN C++
Autor:  Juan
Soy Argentino y medio bruto, y tengo un problema. Tengo que entregar un programa en la facultad a modo de trabajo practico y mi problema es que no puedo crear un vector o cualquier otra estructura de datos en forma dinamica con la cual pueda utilizar la memoria que necesito.
El Sistema Operativo que uso es Windows 95, el compilador que uso es Turbo C++ 3.0 de Borland.
El vector del que hablo debe guardar al menos 30000 estructuras que contengan un entero largo y una cadena de caracteres de 4 posiciones (char[4]). Agradeceria a todo el que me pueda responder esta pregunta...

  Respuesta:  Andres Manggini
Algo asi deberia funcionar:
struct A
{
long l;
char c[4];
}

void main()
{
A pA;
pA = new A[30000];
}

Compilando en modo huge.
Ahi tienes un array de 30000 estructuras creado dinamicamente.
Cualquier cosa mandame un E-Mail

Saludos desde Argentina.


  Respuesta:  Daniel Osuna
Aqui va una solución que emplea el API de windows:
struct A
{
long l;
char c[4];
}

HGLOBAL hpA;
struct A *pA;
HGLOBAL hpa

void main()
{
hpa = GlobalAlloc( GPTR, 30000);
pa=(struct A *pA)GlobalLock(hpa);
}

Esta forma funcionará solo porque el numero de bytes de cada elemento es divisor entero de 65536 que es el tamaño de un segmento de DOS. Si no fuera así deberías rellenar al estructura hasta el próximo divisor entero.
pe.
struct B{
char dato1[6];
long dato2;
char dato3;
}
debeías rellenarlo como:
struct B{
char dato1[6];
long dato2;
char dato3;
char relleno[5];
}