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