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 est membre privé de FileManager et est juste un tableau de fichier * 's
Lorsque le même test exact est effectuée dans la fenêtre immédiate i obtenir un résultat de 1!?!Comment ce simple test d'égalité de pointeur peut-il échouer?

EDIT le == true a été ajouté purement comme un contrôle de santé mentale !!

+0

si je peux faire une suggestion: Je pense que vous devriez vraiment utiliser une structure de données plus avancées ici. Un hachage quelconque empêcherait la recherche à chaque fois que cette fonction est appelée, et je ne peux qu'imaginer qu'il existe d'autres fonctions de ce type dans une classe "manager" comme celle-ci. Les classes de manager sont aussi quelque chose d'une odeur de code dans beaucoup de cas ... – rmeador

+0

La classe est à ses balbutiements, et le hachage est sur la liste! Mais merci pour la suggestion car elle confirme mes oppinions .. –

Répondre

4

Vous avez

_openFiles[i] == NULL; 

devrait-il être

_openFiles[i] = NULL; 

?

+0

ha! pour la honte! –

+0

Alors la comparaison n'échouait pas? J'ai supposé que "Fenêtre Immédiate" signifiait que vous faisiez cela dans un débogueur quelconque - n'avez-vous pas franchi le programme? également: Compile avec des avertissements complets (et même les avertissements comme des erreurs) afin d'éviter de telles erreurs. – Pod

+2

Q: Qu'avons-nous appris aujourd'hui? A1: Moins il y a de caractères, plus il est difficile de trouver le bogue. A2: Jamais, jamais, faire des affectations à l'intérieur des conditions. –

2

Pas assez de karma pour ajouter un commentaire, mais si cma la réponse était correcte (qu'une condition devrait être une cession) notez que cela a été corrigé. Je l'ai regardé longtemps, essayant de trouver le bug, avant d'abandonner et de lire les réponses.

Pour tous ceux qui peuvent, ne hésitez pas à supprimer cette « réponse ».

+0

Oui ... je me demandais la même chose. Je ne pouvais pas pour la vie de moi comprendre ce qui n'allait pas avec ça à cause de ça. : / – Zack

Questions connexes