[C con Clase] Problema extraño con memoria

vicente lozano vicentelozano en gmail.com
Mar Mayo 31 13:28:09 CEST 2011


Hola buenas,

Estoy depurando un programa y me da un problema muy raro con la memoria.

Hay una modulo listas.c que gestiona listas de elementos:

typedef void *ELEMENTO;

typedef struct nodo{
ELEMENTO dato;
struct nodo *siguiente;
} NODO, *pNODO;

typedef struct LISTA{
pNODO primero, ultimo;
int elementos;
} LISTA, *pLISTA;


En el cual usando la funcion:

/**********************************************************************/
void crear_unitaria_copiando (pLISTA pL, ELEMENTO e, int tamano)
/**********************************************************************/
{
pL->primero = (pNODO) malloc (sizeof (NODO));
pL->ultimo = pL->primero;
pL->primero->dato = (void *) malloc (tamano);
memcpy (pL->primero->dato, e, tamano);
pL->primero->siguiente = NULL;
pL->elementos = 1;
printf("LISTAS: Creada unitaria. %s->%s\n",e,pL->primero->dato);
}


Me da el siguiente problema:

LISTAS: Creada unitaria. 0->0Sp

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.

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.

Asumo que es un problema de que esta usando una zona de memoria extraña,
pero no entiendo porque.

A ver si algun sabio me puede echar una mano, si necesitais mas informacion
decirmelo que no tengo ningun problema.

Un saludo
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110531/a0241b94/attachment.html>


Más información sobre la lista de distribución Cconclase