[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