Problem Speicherüberlauf mit scandir() trotzt free()!!!



  • Hi Leute,

    habe irgendwie ein grosses Problem.
    Ich hole mir in einer Endlosschleife den Inhalt eines bestimmten Directories und arbeite dann weiter mit den Directoryeinträgen(diese sind in einer Namelist[] gespeichert). Wenn ich nun diese Einträge nicht mehr brauche gebe ich den Speicher der Nameliste[] mit free() wieder frei. So dachte ich, aber leider muss ich feststellen das der Speicher nicht wieder frei gegeben wird und mein Proggy sich irgendwann aufhängt da kein Speicher mehr vorhanden.

    while (1)
        { 
             MaxEntryWbnrBra = (scandir(BraWbnrPath,&NamelistWbnrBra,0,alphasort));
    	if (MaxEntryWbnrBra == ERROR)
    	{    
    	    perror("Could not read Directory");
    	    return (0);
    	}
             ...
             ...
             ...
             free(NamelistWbnrBra); 
         }
    

    Weiss jemand von euch wo mein Denkfehler liegen könnte?

    Danke im voraus

    C u



  • Du gibst nur das Pointerarray frei, nicht die Einträge!

    include <dirent.h>
    main(){
        struct dirent **namelist;
        int n;
    
        n = scandir(".", &namelist, 0, alphasort);
        if (n < 0)
            perror("scandir");
        else {
            while(n--) {
                printf("%s\n", namelist[n]->d_name);
                free(namelist[n]);
            }
            free(namelist);
        }
    }
    


  • Klasse werde ich gleich mal ausprobieren....

    C u


Anmelden zum Antworten