error - null pointer assigment ALGUIEN PUEDE AYUDARME????

xDev
08 de Mayo del 2004
esto me da error, alguien sabe que puede ser????

void grabar_medidor (void)
{
FILE *pft20;
char nombremed[15];
char *strLineMed;

strLineMed= (char *) malloc(sizeof(char)*100);

if (medi == TRUE)
{
pft20 = fopen("medidor.dat", "r");
fgets(nombremed,13,pft20);
fclose(pft20);

flushall();
free(strLineMed);

pft20 = fopen(nombremed, "a");


strcpy(strLineMed,"");
FormaReg(strLineMed,fili,4,1);
FormaReg(strLineMed,zona,3,1);
FormaReg(strLineMed,ruta,4,1);
FormaReg(strLineMed,ctau,7,1);
FormaReg(strLineMed,numedidor,12,1);
FormaReg(strLineMed, um,3,1);
FormaReg(strLineMed, marca,3,1);
FormaReg(strLineMed, diametro,5,1);
fprintf(pft20,"%sn",strLineMed);

fclose(pft20);
}
}

Alejandro_
08 de Mayo del 2004
¿cuál es el mensaje de error?

Así como está, yo no me doy cuenta qué puede estar mal. Donde escribes:
fgets(nombremed,13,pft20);
estás poniendo los primeros 12 caracteres leidos desde pft20 más un cero, o la cantidad de caracteres hasta un salto de línea (incluido), lo que se encuentre antes. ¿Es esa la intensión?

Alejandro



xDev
08 de Mayo del 2004
ok, tenes razon, te explico

void grabar_medidor (void)
{
FILE *pft20;
char nombremed[15];
char *strLineMed;

strLineMed= (char *) malloc(sizeof(char)*100);

if (medi == TRUE)
{
pft20 = fopen("medidor.dat", "r"); /*lo que contiene el archivo es el nombre del archivo a crear */
fgets(nombremed,13,pft20);
fclose(pft20);

flushall();
free(strLineMed);

pft20 = fopen(nombremed, "a");
/*creo el archivo con el nombre que cargue*/

strcpy(strLineMed,"");

/* la funcion FormaReg, simplemente va creando una linea la cual es creada por varias variables anteriormente cargadas*/
FormaReg(strLineMed,fili,4,1);
FormaReg(strLineMed,zona,3,1);
FormaReg(strLineMed,ruta,4,1);
FormaReg(strLineMed,ctau,7,1);
FormaReg(strLineMed,numedidor,12,1);
FormaReg(strLineMed, um,3,1);
FormaReg(strLineMed, marca,3,1);
FormaReg(strLineMed, diametro,5,1);
fprintf(pft20,"%sn",strLineMed);

fclose(pft20);
/* he detectado que hasta aqui todo funciona bien en la pc, pero cuando esta en el handheld tengo el problema (el handheld es un radix) */

}
}

talvez me podes ayudar a enterder la administracion de la memoria si este fuese el caso

gracias por tu tiempo

Alejandro_
08 de Mayo del 2004
No, me confundí.

> free(strLineMed);
> pft20 = fopen(nombremed, "a");
> strcpy(strLineMed,"");
> FormaReg(strLineMed,fili,4,1);
> FormaReg(strLineMed,zona,3,1);
> ... ... ...

Estas escribiendo en memoria que ya fue liberada al sistema.

Alejandro


xDev
08 de Mayo del 2004
podes obviar el:

free(strLineMed);

lo que pasa es que eso lo puse en un intento desesperado, pero no me funciono jejejjeje
estoy pegado con ese error,
talvez tenga que ver con la asignacion de memoria en el config.sys del handheld que creen?????