<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>
<br><br>> Date: Wed, 28 Nov 2007 22:30:20 +0100<br>> To: cconclase@listas.conclase.net<br>> From: programante@gmail.com<br>> Subject: Re: [C con Clase] Manejo de memoria en C<br>> <br>> Adrian Ferreres Esteller escribió:<br>> > Hola lista:<br>> ><br>> >   Tengo un problema sobre manejo de mapeados de memoria en C. Tengo <br>> > mapeado un fichero en memoria. Ese fichero tiene la forma de:<br>> ><br>> > Etiqueta Valor1#Valor2#Valor3<br>> ><br>> > y tengo que cambiar los separadores # por los separadores |. Tengo un <br>> > puntero a void llamado pAux1 que me apunta a la direccion de memoria <br>> > inicial y el codigo que uso es el siguiente<br>> ><br>> > While ((pAux1 = memchr(pAux1,'#',LONG_LINEA) != NULL)<br>> >         memset (pAux1,'|',sizeof(char));<br>> ><br>> ><br>> ><br>> > El resultado de ejectuar esta sentencia es segmentation fault y me da <br>> > al ejecutar el memset. Es decir, logueo el valor de pAux1 antes del <br>> > bucle y antes del memset y se que es correcto y que esta apuntando a <br>> > la # pero al ejecutar el memset casca. ¿Alguien sabe porque?<br>> ><br>> ><br>> > Muchas Gracias por vuestro tiempo<br>> ><br>> > P.D: Por si alguien lo dudaba, LONG_LINEA es una constante que vale la <br>> > longitud maxima de una linea del fichero mapeado en memoria<br>> Es la longitud máxima de la línea, vale, pero ¿hay al menos LONG_LINEA <br>> caracteres desde el último # hasta el final del archivo? En otro caso <br>> intentará comprobar si hay algún # después de finalizar la zona en que <br>> el archivo está mapeado, dando el fallo de segmentación (o peor aún: <br>> fallando a veces sí y a veces no).<br>> <br>> Seguramente deberías rehacerlo realizando la comprobación sobre el <br>> tamaño del archivo:<br>> for (i=0; i < Tam_Archivo; i++)<br>>     if (((char*)pAux1)[i] == '#')<br>>          ((char*)pAux1)[i] = '|';<br>> <br>> _______________________________________________<br>> Lista de correo Cconclase Cconclase@listas.conclase.net<br>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<br>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ<br><br>No, tampoco funciona. He copidado el codigo que me dices añadiendo dos log por pantalla:<br><br>for (i=0;i<Tam_Archivo;i++) {<br>    printf ("Iteracion numero: %d",i);<br>    printf (" Valor de pAux1 antes de la sustitucion: <%s>",pAux1);<br>    if (((char*)pAux1)[i]=='#')<br>       ((char*)pAux1[i]='l';<br>   printf ("Valor de pAux1 despues de la sustitucion: <%s>",pAux1);<br>}<br><br><br>Tengo un Segmentation Fault justo cuando entra en la condicion, es decir, al acceder a la posicion pAux[i] para cambiar el char '#' por el '|'<br><br /><hr />Tecnología, moda, motor, viajes,…suscríbete a nuestros boletines para estar a la última <a href='http://newsletters.msn.com/hm/maintenanceeses.asp?L=ES&C=ES&P=WCMaintenance&Brand=WL&RU=http%3a%2f%2fmail.live.com' target='_new'>MSN Newsletters</a></body>
</html>