Ladění problému ve stacku

Libor Chocholaty libor_ml1 na mts.cz
Čtvrtek Září 16 14:25:10 CEST 2010


On 09/16/2010 01:14 PM, Ladislav Vaiz wrote:
> Ahoj,
> mám program v C, kde je někde skrytá chyba, asi nějaké přetečení:
>
> void funkce(){
>    struct dirent **namelist = NULL;
>    int n, i;
>    char *neco;
>    ...
>
>    ...
>    n = scandir(...);
>    spousta_kodu();
>    a_volani_funkci();
>
>    for (i=0;i<n;i++) free(namelist[i]);
> }
>
> Volání free(namelist[32]) vyvolá segmentation fault, protože n bylo
> spoustou volání přepsáno na nesmysl (31671296, ale mění se to).
>
> Jak odladit, kde to "ustřelilo" do n?

Metoda puleni intervalu?
Jinak bych cekal test na navratovou hodnotu scandir(3)
RETURN VALUE
       The scandir() function returns the number of directory entries
selected or -1 if an error occurs.

Ta minus jednicka muze celkem vadit...

Libor

>
> Gdb příkaz watch nefunguje, zakřičí, že proměnná n pozbyla platnosti.
> Patrně jde o softwarový watchpoint. Hardwarový mi nefunguje ani pod
> rootem. Zkoušel jsem přidat globální pointer na n a do podezřelých
> funkcí dát výpis. Pak se ale chyba neprojeví, asi to ustřelí jinam. Je
> to Debian Lenny, AMD64.
>
> Netušíte, co s tím?
>
>
> Díky Láďa
>
>
> _______________________________________________
> Linux mailing list
> Linux na linux.cz
> http://www.linux.cz/mailman/listinfo/linux




Další informace o konferenci Linux