2009-06-26 4 views
-2
void FileManager::CloseFile(File * const file) 
{ 
    for (int i = 0; i < MAX_OPEN_FILES; ++i) 
    { 
     if ((_openFiles[i] == file) == true) 
     { 
      _openFiles[i] == NULL; 
     } 
    } 
... 

_openFiles ist ein privates Mitglied des Filemanagers und ist nur ein Array von File * 's
Wenn der exakt gleichen Test in dem Direkt-Fenster ausgeführt wird, i ein Ergebnis von 1 bekommen!?!Wie konnte dieser einfache Zeigergleichheitstest fehlschlagen?

BEARBEITEN das == true wurde rein als Plausibilitätsprüfung hinzugefügt !!

+0

wenn ich einen Vorschlag anbiete: Ich denke, dass Sie wirklich eine erweiterte Datenstruktur hier verwenden sollten. Ein Hash irgendeiner Art würde die Notwendigkeit für die Suche jedes Mal verhindern, wenn diese Funktion aufgerufen wird, und ich kann mir nur vorstellen, dass es in einer solchen "Manager" -Klasse noch andere solche Funktionen gibt. Manager-Klassen sind in vielen Fällen auch etwas von einem Code-Geruch ... – rmeador

+0

Die Klasse ist in den Kinderschuhen, und Hashing steht auf der Liste! Aber danke für den Vorschlag, da er meine Meinung bestätigt. –

Antwort

4

Sie haben

_openFiles[i] == NULL; 

dass

_openFiles[i] = NULL; 

sein sollte?

+0

ha! zum Schämen ! –

+0

So war der Vergleich nicht fehlgeschlagen? Ich nahm an, dass "Direktes Fenster" bedeutet, dass Sie dies in irgendeiner Art von Debugger tun würden - haben Sie nicht durch das Programm gegangen? Auch: kompilieren mit vollständigen Warnungen (und sogar Warnungen als Fehler), um solche Fehler zu vermeiden. – Pod

+2

F: Was haben wir heute gelernt? A1: Je weniger Zeichen der Fehler enthält, desto schwerer ist es, den Fehler zu finden. A2: Niemals jemals Aufgaben innerhalb von Bedingungen ausführen. –

2

Nicht genug Karma, um einen Kommentar hinzuzufügen, aber wenn cma 's Antwort war richtig (dass eine bedingte sollte eine Aufgabe sein), dann wünschte ich, dass der ursprüngliche Beitrag nicht behoben wurde, oder zumindest a Beachten Sie, dass es behoben wurde. Ich starrte es lange an und versuchte den Käfer zu finden, bevor ich aufgab und die Antworten las.

Jedem, der kann, fühlen Sie sich frei, diese "Antwort" zu löschen.

+0

Ja ... Ich habe mich das gleiche gefragt. Ich konnte nicht für das Leben von mir herausfinden, was damit falsch war. : / – Zack

Verwandte Themen