C/Visual C - Ayuda Arrays dinamicos en C

 
Vista:

Ayuda Arrays dinamicos en C

Publicado por Fernando (1 intervención) el 23/05/2006 10:31:21
Hola a todos...

A ver, tengo un problemilla, estoy desarrollando una aplicacion que lee unos datos de un fichero de texto los cuales quiero almacenar en memoria y tengo varias dudas...

Existe una limitacion de cantidad de memoria a reservar con malloc o farmalloc?

El numero de registros que puede tener el fichero va desde 2 lineas hasta 500000, es posible almacenar 500000 lineas de texto en un array de structuras?

la cantidad de caracteres por linea de fichero varia entre 35 y 300.

un ejemplo del fichero seria algo asi:

11221012332110231110112..... puede llegar hasta 300 caracteres
00211223321110231123033...
....
....
puede llegar hasta 500000 lineas.

no consigo hacerlo funcionar, o el puntero se pierde o se me sale del entorno os pongo un ejemplo de lo que estoy haciendo a ver si alguien me puede ayudar...

//*********************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Datos{
char linea[1024]; //array para almacenar las lineas de ficheros
};

main()
{

Datos *pD=NULL;

FILE *po;
char strlinea[1024];
long numLineasFichero=100;//puede variar es una dato que sera de //entrada para el usuario

int intlinea=0;

po=fopen("C:/HFCC/Ficheros/F1.txt", "r");

pD=(Datos *)calloc(numLineasFichero, sizeof(Datos));

while(!feof(po))
{
fgets(strlinea,1024-1, po);
strcpy(pD[intlinea].linea, strlinea);
intlinea++;
}

free(pD);
fclose(po);
}

//**********************************************************

A ver si alguien me puede decir que estoy haciendo mal, pq seguro que en algo estoy fallando y ya no se que mas probar, he probado con malloc, calloc, farmalloc, farcallc, realloc.... y no consigo almacenarlos ya que despues al accedes a los datos me devuelve algo que no es...

Gracias de atemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda Arrays dinamicos en C

Publicado por fernando.gomez (1603 intervenciones) el 23/05/2006 19:53:54
En teoría, el límite que hay para la reserva de memoria es el límite que imponga tu sistema operativo. En el caso de Windows, es muy generosa y te da libertad de hasta 4GB. Claro, evidentemente no hay memorias RAM de 4 GB, por lo que el límite se reduce al límite de tu memoria física.

Por lo mismo, no hay límite al número de registros que puedes tener en un array. Sin embargo, hay un problema técnico con esto. Supongamos:

int array[4294967296];

En la mayoría de los compiladores modernos, este sería el límite. ¿Por qué? Bueno, notaras que el número 4294967296 equivale al número máximo que se puede almacenar en un long. En este tenor, no puede haber un registro de 4294967297 porque ocurriría un desbordamiento de variable. Así pués, el límite sería el valor máximo que la variable con mayor tamaño en tu compilador pueda alcanzar.

En el caso de Visual C++ 6, el tamaño de un long era de 32 bits. En el caso de Visual C++ 8, ya son de 64 bits. Así las cosas, en realidad el límite de memoria que puedes emplear está determinada por tu compilador.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar