Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Verkettete Listen und Ordnerinhalt

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.07.2008, 21:47 Uhr
~acdc1
Gast


Hallo,
ich habe ein Problem und weis einfach nicht wie ich es lösen soll. Mein Programm erstellt mit Hilfe von Klassen eine Verkettete Liste. Sie wird im Zug einer Ordnerinhaltsauflistung erstellt und speichert den vollen Pfad eines jeden Elements, das im Ordner vorkommt (Datei oder Ordner).
Nun hab ich mein kleines Programm schon dreimal neu erstellt und jedes Mal in einer etwas anderen Weise.
Leider stürzt das Programm (Verweis auf falschen Speicherbereich) immer ab. Das nächste ist, dass der Fehler nicht immer auftritt sondern nur sporadisch und je nachdem welchen Ordner ich durchsuchen soll.

Ich verwende Dev-C++ 4.9.9.2 und habe bemerkt, wenn ich das Programm debugge tritt kein Fehler auf, starte ich es normal erscheint die Fehlermeldung.

Ich würde gern den code hier uploaden, habe aber keine Möglichkeit dazu gefunden, würde mich aber sehr freuen, wenn mir jemand ein paar Tips geben könnte. Wahrscheinlich passen meine destruktoren, delete anweisungen etc. nicht - habe aber das schon mehrmals überprüft. Ich könnte den gesamten code auch per mail versenden.

Danke im Vorhinein.
acdc

eine wichtige Methode:


C++:
int liste::makeList()
{
  DIR *dirhd;
  dirent *entry;
  char *ctemp;

  if(dirhd=opendir(pfad))    //z.B.: h:/neu/
  {
    if(pfad[strlen(pfad)-1]=='\\')
      pfad[strlen(pfad)-1]=0;
    do
    {
      if(entry=readdir(dirhd))    
      {
        switch(entry->d_name[0])
        {
          case '.': break;        
          default:
            ctemp=new char [strlen(pfad)+strlen(entry->d_name)+2];
            sprintf(ctemp,"%s\\%s",pfad,entry->d_name);            
            addElement(new element(ctemp,strlen(ctemp),this));
            delete [] ctemp;
        }
      }
    }while(entry);
    closedir(dirhd);
  }
  else
    return 0;    
  return 1;      
}


Dieser Post wurde am 11.07.2008 um 09:07 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.07.2008, 09:09 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wie schaut bei dir "element" aus? ansonsten würd ich dir empfehlen, da du ja eh c++ verwendest "std::string" zu verwenden, dann musst du nicht auf die Speicherverwaltung aufpassen (bzw nur bedingt darauf)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.07.2008, 02:20 Uhr
xXx
Devil


Hm davon mal abgesehen, dass man die Pfadlänge einfach mal zwischenspeichern könnte, statt zig mal abzufragen...


C++:
const bool liste::makeList()
{
    ::DIR* ptr_dir(::opendir(pfad));
    if (!ptr_dir) return false;

    std::string path(pfad);
    if (path[path.length()] != '\\') path += '\\';
  
    ::dirent* ptr_entry;
    while (ptr_entry = ::readdir(ptr_dir))
    {
        if (ptr_entry->d_name[0] != '.')
            addElement(new element(path + ptr_entry->d_name, path.length() + std::strlen(ptr_entry->d_name), this));
    }
    ::closedir(ptr_dir);
  }
  return true;
}
... aber so wirklich toll is das auch nicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: