Benutzer mit den meisten Antworten
FindFirstFile - FindNextFile

Frage
-
Hallo liebe Community,
ich führe in meinem Programm eine rekursive Pfadanalyse durch mit folgender Funktion:
void PathAnalyse(CHAR *Path) { WIN32_FIND_DATA FD = {0}; HANDLE hFind = FindFirstFile(Path, &FD); UINT Size = strlen(Path); do { if(FD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if(!strcmp("..", FD.cFileName)) continue; if(!strcmp("." , FD.cFileName)) continue; CHAR *Pfad = new CHAR[MAX_PATH]; strcpy(Pfad, Path); Pfad[Size - 1] = 0; strcat(Pfad, FD.cFileName); strcat(Pfad, "\\*"); FolderCount++; PathAnalyse(Pfad); delete(Pfad); } else { FileCount++; /* Element *Data = new Element("Hallo Welt", "Hallo Welt"); Liste->Insert(Data); */ } }while(FindNextFile(hFind, &FD)); }
Wenn ich den C:\\ Pfad und alle Unterordner untersuche belegt die obige Funktion stück für Stück meinen Arbeitsspeicher. Obwohl ich das Einfügen der Pfade in meine Liste herausgenommen hab werden trotzdem etwa 500 MB Arbeitsspeicher von der obigen Funktion beansprucht und nachdem die Pfadsuche beendet ist nicht wieder frei gegeben. Da steig ich nicht ganz hinter und finde auch keine Lösung für dieses Problem. Könntet ihr mir bitte weiterhelfen?
Antworten
Alle Antworten
-
Hey Danke für deine schnelle Antwort. Das mit dem delete [] hab ich noch schnell reingebaut und nen Freund hat mich noch drauf hingewiesen, dass ich
FindClose(hFind);
aufrufen muss. Danach ging einiges um vieles Leichter und das mit dem delete geht jetzt auch wesentlich schneller
-
Ich verstehe nicht, was in diesem Fall der Unterschied zwischen delete und delete[] sein soll.
#include "stdafx.h" #include <crtdbg.h> int _tmain(int argc, _TCHAR* argv[]) { int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); // Get current flag flag |= _CRTDBG_LEAK_CHECK_DF; // Turn on leak-checking bit _CrtSetDbgFlag(flag); // Set flag to the new value char *s = new char[30]; //delete s; delete []s; return 0; }
- Bearbeitet milonass Dienstag, 19. März 2013 22:37
-
Für solange es Objekte ohne Destruktor sind ist das auch kein Unterschied. Jedenfalls bei einem VS Compiler.
Wenn aber hier Objekte mit Destruktor verwendet werden, dann würde nur für das erste Element der Destruktor aufgerufen. Nicht für alle im Array!
Es ist also ein gewaltiger Unterschied und man sollte es sich angewöhnen "richtig" zu machen.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de