2009-06-26 9 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まったく同じテストをイミディエイトウィンドウで実行されたとき、私は、1の結果を得るための*
FileManagerののプライベートなメンバーであり、ファイルの単なる配列であります!?!この単純なポインタの等価性テストはどうすれば失敗するでしょうか?

EDIT純正チェックとして== trueが追加されました!あなたは

_openFiles[i] == NULL; 

を持って

+0

もし私が提案してくれるなら、あなたは本当により高度なデータ構造をここで使うべきだと思います。ある種のハッシュは、その関数が呼び出されるたびに検索の必要性を防ぎ、このような "マネージャ"クラスに他の関数があるとしか想像できません。マネージャクラスは、多くの場合、コードの匂いのようなものです... – rmeador

+0

クラスは初期段階にあり、ハッシングはリストにあります!しかし、それは私の意見を確認するとして、提案に感謝.. –

答えて

4

はそれが

_openFiles[i] = NULL; 

すべきですか?

+0

ハ!恥のために! –

+0

比較は失敗していませんか? 「イミディエイトウィンドウ」は、ある種のデバッガでこれを実行していることを意味していました。 また、このような間違いを避けるため、完全な警告(および警告をエラーとしても)でコンパイルしてください。 – Pod

+2

Q:今日、私たちは何を学びましたか? A1:修正する文字数が少ないほど、バグを見つけるのが難しくなります。 A2:決して条件の中で決して、決して、割り当てをしないでください。 –

2

コメントを追加するためのカルマが足りないが、cmaの答えが正しい(条件付きでなければならない)場合、元の投稿は修正されていないか、少なくともそれは修正されていることに注意してください。私は長いこと、バグを見つけようとしていて、あきらめて答えを読む前に、それを見つめていました。

できるだけ早く、この "回答"を削除してください。

+0

そうですね...私は同じことが不思議でした。私は私の人生にとってそれが原因で何が間違っているのか理解できませんでした。 :/ – Zack

関連する問題