Aca va un pequeño ejemplo que si bien no usa la misma estructura que yo
tengo definida da el mismo error:
#include <stdlib.h>
typedef struct nodo
{
struct nodo *proxNodo;
} nodo;
nodo *agregarNodo(nodo *ptrNodo);
nodo *agregarNodo(nodo *ptrNodo)
{
if (ptrNodo != NULL)
{
ptrNodo->proxNodo = (nodo *) malloc(sizeof(nodo));
ptrNodo = ptrNodo->proxNodo;
}
else
{
ptrNodo = (nodo *) malloc(sizeof(nodo));
ptrNodo->proxNodo = NULL;
}
return ptrNodo;
}
int main (int argc, char **argv)
{
nodo *ptrLista = NULL;
nodo *ptrNodo = NULL;
nodo *ptrNodoSiguiente = NULL;
ptrLista = agregarNodo(ptrLista);
ptrNodo = agregarNodo(ptrLista);
ptrNodo = ptrLista;
while(ptrNodo != NULL)
{
ptrNodoSiguiente = ptrNodo->proxNodo;
free(ptrNodo);
ptrNodo = ptrNodoSiguiente;
}
return 0;
}
Estoy compilando de la siguiente forma
cc -Wall -ansi -pedantic-errors -O3 -DNDEBUG -ggdb -DDEBUG -fno-inline
-c -o ej.o ej.c
Corriendolo con valgrind:
valgrind --tool=memcheck ./ej
==10594== Memcheck, a memory error detector.
==10594== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et
al.
==10594== Using LibVEX rev 1658, a library for dynamic binary
translation.
==10594== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
==10594== Using valgrind-3.2.1-Debian, a dynamic binary instrumentation
framework.
==10594== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et
al.
==10594== For more details, rerun with: -v
==10594==
==10594== Conditional jump or move depends on uninitialised value(s)
==10594== at 0x804843E: main (ej.c:35)
==10594==
==10594== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 11 from
1)
==10594== malloc/free: in use at exit: 0 bytes in 0 blocks.
==10594== malloc/free: 2 allocs, 2 frees, 8 bytes allocated.
==10594== For counts of detected errors, rerun with: -v
==10594== All heap blocks were freed -- no leaks are possible.
Saludos!
El dom, 30-09-2007 a las 21:25 -0300, Gonzalo Merayo escribió:
> Javier,
> ¿Podes armar un programita minimo para reproducir?
> ¿Estas compilando con -O0?
>
> Saludos
>
> On 9/30/07, Javier Persico <[EMAIL PROTECTED]> wrote:
> > Me encuentro con el mismo problema con valgrind en cuanto a la variable
> > no inicializada, probe varias cosas pero nada funciona.
> >
> > Esto es lo que da valgrind:
> >
> > ==16684== Conditional jump or move depends on uninitialised value(s)
> > ==16684== at 0x804905A: limpiarLista (lista.c:50)
> > ==16684== by 0x8048B94: main (main.c:113)
> >
> >
> > Mi funcion es:
> >
> > lista.c
> > 47 void limpiarLista(nodo *ptrLista)
> > 48 {
> > 49 nodo *ptrNodo = ptrLista;
> > 50 while(ptrNodo != NULL)
> > 51 ptrNodo = borrarNodo(ptrNodo);
> > 52 }
> >
> > main.c
> > 4 /* Inicializacion del puntero a la lista */
> > 5 nodo *headerLista = NULL;
> > 113 limpiarLista(headerLista);
> >
> > Es evidente que el puntero esta inicializado.
> >
> > Nota: headerLista se pasa como parametro y en algunos casos es
> > modificado por otras funciones.
> >
> >
> > Saludos!
> >
> >
> >
> > _______________________________________________
> > Lista de correo Programacion.
> > [email protected]
> > http://listas.fi.uba.ar/mailman/listinfo/programacion
> >
> >
>
> _______________________________________________
> Lista de correo Programacion.
> [email protected]
> http://listas.fi.uba.ar/mailman/listinfo/programacion
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion