Hola buenas, <div><br></div><div>Estoy depurando un programa y me da un problema muy raro con la memoria.</div><div><br></div><div>Hay una modulo listas.c que gestiona listas de elementos:</div><div><br></div><div><div>typedef void *ELEMENTO; <span class="Apple-tab-span" style="white-space:pre">    </span></div>
<div><br></div><div>typedef struct nodo{</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>ELEMENTO dato; </div><div><span class="Apple-tab-span" style="white-space:pre">      </span>struct nodo *siguiente; </div>
<div>} NODO, *pNODO; </div><div><br></div><div>typedef struct LISTA{</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>pNODO primero, ultimo; </div><div><span class="Apple-tab-span" style="white-space:pre">      </span>int elementos; </div>
<div>} LISTA, *pLISTA; </div></div><div><br></div><div><br></div><div>En el cual usando la funcion:</div><div><br></div><div><div>/**********************************************************************/</div><div>void crear_unitaria_copiando (pLISTA pL, ELEMENTO e, int tamano)</div>
<div>/**********************************************************************/</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>pL->primero = (pNODO) malloc (sizeof (NODO)); </div><div>
<span class="Apple-tab-span" style="white-space:pre"> </span>pL->ultimo = pL->primero; </div><div><span class="Apple-tab-span" style="white-space:pre">     </span>pL->primero->dato = (void *) malloc (tamano); </div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>memcpy (pL->primero->dato, e, tamano); </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pL->primero->siguiente = NULL; </div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>pL->elementos = 1; </div><div><span class="Apple-tab-span" style="white-space:pre">       </span>printf("LISTAS: Creada unitaria. %s->%s\n",e,pL->primero->dato);</div>
<div>}</div></div><div><br></div><div><br></div><div>Me da el siguiente problema:</div><div><br></div><div><div>LISTAS: Creada unitaria. 0->0Sp</div></div><div><br></div><div>Lo que pasamos como "e" es siempre una cadena "0", lo que a bajo nivel es -> [0][\0] pero lo que almacena es: [0] **** [\0] siendo * un numero aleatorio de caracteres aleatorios.</div>
<div><br></div><div>Lo curioso es que esto solo ocurre en el primer uso de la funcion cuando se usan elementos pequeños 1-10 caracteres, y si se usan cadenas mas largas ocurre mas veces hasta que se estabiliza y funciona correctamente.</div>
<div><br></div><div>Asumo que es un problema de que esta usando una zona de memoria extraña, pero no entiendo porque.</div><div><br></div><div>A ver si algun sabio me puede echar una mano, si necesitais mas informacion decirmelo que no tengo ningun problema.</div>
<div><br></div><div>Un saludo</div>