<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Hola Mon,<br>
<br>
El error es que liberas la memoria estando aún dentro de la funcion.
"<font face="arial, helvetica, sans-serif">free(s);"</font><br>
<br>
<font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"></span>has de
liberar la memoria despues de cargar la función o bien mostrar el
array antes de liberar la memoria, sino, no tiene sentido que
reserves la memoria dentro de la función "Split" y antes de salir
de ella, sin mostrar el contenido de lo que deseas, liberar la
memoria dinámica.</font><br>
<br>
Resumiendo, por ejemplo, puedes poner el el bucle de mostrar el
array que tienes en la funcion principal (main) dentro de la funcion
"Split" y antes de liberar la memoria (free(s)) o bien liberar la
memoria en la función principal despues de mostrar el array en la
funcion principal.<br>
<br>
<br>
Espero que te ayude,<br>
<br>
<br>
Un Saludo<br>
<br>
<br>
David Marin<br>
<br>
<br>
<br>
On 30/04/2012 18:17, MON wrote:
<blockquote
cite="mid:1335802646.54834.YahooMailNeo@web132102.mail.ird.yahoo.com"
type="cite">
<div style="color:#000; background-color:#fff; font-family:arial,
helvetica, sans-serif;font-size:12pt">
<div style="font-family: arial, helvetica, sans-serif;
font-size: 12pt; ">Se trata de una función a la que se le
envía como argumento una frase y sirviéndome de la función
"strtok" debe devolver, en un array (char **), cada una de las
palabras que la componen. Sin embargo, se produce un error en
los dos primeros elementos del array.</div>
<div style="font-family: arial, helvetica, sans-serif;
font-size: 12pt; "><br>
</div>
<div style="font-family: arial, helvetica, sans-serif;
font-size: 12pt; ">Os transcribo el código (indicando al final
el error que se produce)</div>
<div style="font-family: arial, helvetica, sans-serif;
font-size: 12pt; "><br>
</div>
<div><font face="arial, helvetica, sans-serif">char
**split(const char *palabra)</font></div>
<div><font face="arial, helvetica, sans-serif">{</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>char
*s = NULL;</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>char
*tmp = NULL;</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>char
**p = NULL;</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>int
count = 0; //contador inicial de elementos del array (char
**)</font></div>
<div><font face="arial, helvetica, sans-serif"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>s
= (char *)malloc( 1 + strlen(palabra) );</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>strcpy(s,
palabra);</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>tmp
= strtok(s, " ");</font></div>
<div><font face="arial, helvetica, sans-serif"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>while(
NULL != tmp )</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>{</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>p
= (char **)realloc(p, sizeof(char *) * (count + 1) ); // un
nuevo elemento para el array</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>p[count]
= tmp; // asigno al elemento la palabra obtenida por
"strtok"</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>tmp
= strtok(NULL, " "); // llamo a la función</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>count++;
// incremento el contador</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>}</font></div>
<div><font face="arial, helvetica, sans-serif"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>free(s);</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>s
= 0;</font></div>
<div><font face="arial, helvetica, sans-serif"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>//
el último elemento del array debe ser nulo</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>p
= (char **)realloc(p, sizeof(char *) * (count + 1) );</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>p[count]
= '\0';</font></div>
<div><font face="arial, helvetica, sans-serif"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>return
p;</font></div>
<div><font face="arial, helvetica, sans-serif">}</font></div>
<div><font face="arial, helvetica, sans-serif"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif">int main(const
int argc, char * argv[])</font></div>
<div><font face="arial, helvetica, sans-serif">{</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>//
llamamos a la función</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>char
**p = split("Lo que el viento se llevó");</font></div>
<div><font face="arial, helvetica, sans-serif"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>//
recorremos "p" para mostrar cada una de las palabra</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>while(
*p != NULL )</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>{</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>printf("%s\n",
*p);</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>++p;</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>}</font></div>
<div><span class="Apple-tab-span" style="white-space:pre"><font
face="arial, helvetica, sans-serif"> </font></span></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>/*</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>
¡LO QUE SALE POR PANTALLA! ¡ERROR!</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span> </font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>
[un espacio vacío en lugar de "Lo"]</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>
[otro espacio vacío en lugar de "que"]</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>
el</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>
viento</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>
se</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>
llevó</font></div>
<div><font face="arial, helvetica, sans-serif"> */</font></div>
<div><font face="arial, helvetica, sans-serif"><br>
</font></div>
<div><font face="arial, helvetica, sans-serif"><span
class="Apple-tab-span" style="white-space:pre"> </span>return
0;</font></div>
<div><font face="arial, helvetica, sans-serif">}</font><font
face="arial, helvetica, sans-serif" size="3"> </font></div>
<div style="font-family: arial, helvetica, sans-serif;
font-size: 12pt; "><br>
</div>
<div style="font-family: arial, helvetica, sans-serif;
font-size: 12pt; "><br>
</div>
<div style="font-family: arial, helvetica, sans-serif;
font-size: 12pt; ">Me podéis aclarar dónde falla mi código.
¡Gracias !</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Lista de correo Cconclase <a class="moz-txt-link-abbreviated" href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a>
<a class="moz-txt-link-freetext" href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a>
Bajas: <a class="moz-txt-link-freetext" href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a></pre>
</blockquote>
<br>
<br>
</body>
</html>