A ver si nos ayudamos en vez de pedir cosas!!!

m_kohls
22 de Diciembre del 2005
Hola, soy yo neuvamente porque estoy con un problema muy grande y tengo que entragar este trabajo en pocos dias y no puedo encontrar el por que....
Estoy teniendo un rarisimo problema con un malloc, les dejo el codigo a ver si pueden ver algo raro.
Igualmente lo que les presento es una pequeña funcion, que al llamarla una vez sola no produce error alguno, ahora cuando la ejecuto mas de 3 veces consecutivas me tira el cartelito de windows se ha detectado un problema y debe cerrarse (enviar informe o no enviar), en fin... lo que hace esta funcion es levantar de un archivo binario algo previamente guardado y genera una estructura para su posterior utilizacion. Cualquier cosa q no explique y les pueda servir diganme.
Se cuelga en el segundo malloc y como veran, hice un printf para ver si el numero que recibia era válido y si lo es. :D
saludos

Desde ya muchas Gracias!!!

NumeroAstronomico* NA_Read(FILE *flujo)
{
NumeroAstronomico *na;
int i, teNecesito;
char *entero;

printf("antes del malloc\n");
if((na = malloc (sizeof(NumeroAstronomico))) == NULL)
{
printf("Error en la asignacion de memoria");
return NULL;
}
printf("antes del fread\n");
fread(&na->longitudError, sizeof(int), 1, flujo);
printf("despues del fread y antes del otro malloc\n");
printf("a ver q tiene longitud de error para q se trabe\n");
printf("%d",na->longitudError+1);
teNecesito=na->longitudError+1;
if ((entero = malloc(sizeof(char)* teNecesito)) == NULL)
{
printf("Error en la asignacion de memoria");
na->entero = NULL;;
}
printf("antes del for\n");
for (i = 0; i < na->longitudError; i++)
{
fread(&entero[i], sizeof(int), 1, flujo);
}
printf("pasa\n");
entero[i] = \'\0\';

na->entero = entero;
printf("se va\n");
return na;
}



Edgarin
22 de Diciembre del 2005
Hola.
Creo q el problema es que estas saturando la memoria, la vas llenando cada vez que ejecutas, ya que solo se dispone de 64k para un programa.
Prueba añadiendo a tu codigo la funcion free(), para que se libere la memoria reservada. Si no estoy mal, su sintaxis es free(puntero);