Programm schmiert ab mmhh komm nich drauf...



  • Hallo Leute,

    brauch unbedingt eure Hilfe. Ich hab nen kleines Prog, dass die Verzeichnis struktur ausgeben soll, mit Rekursion. Aber wenn ich es starte, kommt von Windows nur die Problemberichts Mitteilung. Warum? HAbe ich was mit der Speicherverwaltung verhauen?

    Hier der Code:

    #include <iostream>
    #include <string.h>
    #include <dirent.h>
    #include <stdlib.h>
    
    using namespace std;
    
    /* Kleine Funktionen zur Hilfe */
    bool ArePoints(char * p)
    {
        if(strcmp(p,".") == 0)
            return true;
        if(strcmp(p,"..") == 0)
            return true;
    
        return false;
    }
    bool Is_Dir(const char * dirname)
    {
        DIR * check=NULL;
    
        check=opendir(dirname);
        if (check == NULL)
            return false;
        else
            return true;
    }
    
    /* Hier jetzt die Hauptfunktion */
    void dateibaum(char * pfad)
    {
        DIR * dir;
        struct dirent *entry;
        char * newpfad;
        int size;
    
        dir=opendir(pfad);
    
        do
        {
            entry=readdir(dir);
            if(entry==NULL)
                break;
    
    		if(!ArePoints(entry->d_name))
    		{
    		    size=strlen(pfad)+strlen(entry->d_name)+1;
    
    		    newpfad= new char [size];
    		    sprintf("%s\\%s",pfad,entry->d_name);
    
    			if(Is_Dir(newpfad))
    			{
    				cout <<"\v"<<newpfad<<"\n";
    				dateibaum(newpfad);
    
    			}else{
    				cout<< "\v" << newpfad <<"\n";
    			}
    
    		}
    	}while (true);
    
    	delete [] newpfad;
    	closedir(dir);
    }
    
    int main()
    {
    
    	cout << "Rekursive Ausgabe: \n\n\n" << endl;
    	dateibaum("D:\\");
    
    	return 0;
    }
    

    Warum klappt das nicht?

    Es grüßt
    ach is doch PillePalle 🙂



  • Hallo

    Warum benutzt du nicht std::string?

    chrische



  • Tja gute Frage^^. Werd ich umschreiben, aber selbst wenn, warum klappt das nicht?



  • debugger? schritt für schritt

    btw: size muss noch eins größer sein, lange(pfad)+länge(entry)+länge("\")+1 nullbyte



  • mhh Debugger gibt mir viele Sachen aus, leider weiß ich nich wie ich damit umgehen soll. Kennt jemdand dazu ein Tut oder sowas?

    Das Byte dazu hilft auch nichts 😞

    Aber die String-Klasse Variante funzt tadellos.

    Gruß ^^



  • Hallo

    Es gibt hier im Forum einen Artikel zum debuggen. Benutz in c++ besser die std::string-Klase, weil dann einige Speicherverwaltungsfehler nicht passieren können.

    chrische


Anmelden zum Antworten