[C con Clase] Problema extraño con memoria

vicente lozano vicentelozano en gmail.com
Mie Jun 1 11:18:23 CEST 2011


Joder, solucionado.

En el modulo listas.c faltaba #include <stdlib.h>.... me encantan los
modulos que nos dan para trabajar sobre ellos.....

Gracias a todos, un saludo!

2011/5/31 vicente lozano <vicentelozano en gmail.com>

> Hola Samuel,
>
>  En primer lugar, muchas gracias por responder.
>
>  Es un ELEMENTO, pero ELEMENTO es un puntero generico (typedef void
> *ELEMENTO;) de ahi el casting en el malloc (= (void *) malloc (tamano)).
>
>  Creo que te referias a que si fuera un "no puntero" no tendria sentido el
> malloc, pero como ves en este caso no es asi, si no lo decias por eso, yo
> sigo sin ver el problema.
>
>  Por cierto, en el caso que da el error, ELEMENTO son cadenas, es decir se
> llamaria a la funcion:
>
>   LISTA miLista;
>   char* miCadena="0";
>
>   crear_unitaria_copiando (&miLista, miCadena,
> strlen(miCadena)*sizeof(char));
>
> Un saludo
>
>
> 2011/5/31 Samuel Díaz García <samueldg en arcoscom.com>
>
>> Chico:
>>
>> ¿Qué es el miembro "dato" de tu estructura "NODO"? ¿Un "ELEMENTO" o un
>> "puntero a ELEMENTO"?
>>
>> Con eso creo que he respondido.
>>
>> Salu2
>>
>> vicente lozano escribió:
>>
>>> 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
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> Lista de correo Cconclase Cconclase en listas.conclase.net
>>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>>
>>
>> --
>>   Samuel Díaz García
>>    Director Gerente
>> ArcosCom Wireless, S.L.U.
>>
>> CIF: B11828068
>> c/ Romero Gago, 19
>> Arcos de la Frontera
>> 11630 - Cadiz
>>
>> http://www.arcoscom.com
>>
>> mailto:samueldg en arcoscom.com
>> msn: samueldg en arcoscom.com
>>
>> Móvil: 651 93 72 48
>> Tlfn.: 956 70 13 15
>> Fax:   956 70 34 83
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110601/d058a7e1/attachment.html>


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