2009-06-26 1 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의 결과를 얻을 단지 배열입니다!?!어떻게이 간단한 포인터 평등 테스트가 실패 할 수 있습니까?

EDIT == true가 순결 점검으로 추가되었습니다!

+0

제안 사항 : 나는 당신이 정말로 더 진보 된 데이터 구조를 여기에 사용해야한다고 생각합니다. 어떤 종류의 해시는 함수가 호출 될 때마다 검색의 필요성을 막을 것이고, 나는 이것과 같은 "관리자"클래스에 다른 함수가 있다고 상상할 수 있습니다. 관리자 클래스는 많은 경우 코드 냄새의 무언가이기도합니다 ... – rmeador

+0

클래스가 초기 단계에 있으며 해시가 목록에 있습니다! 그러나 그것이 나의 의견을 확인하는 것에 따라 제안에 감사드립니다. .. –

답변

4

당신

_openFiles[i] == NULL; 

가 그

_openFiles[i] = NULL; 

해야 있나요?

+0

하아! 부끄러워! –

+0

그래서 비교가 실패하지 않았습니까? "직접 실행 창"은 어떤 종류의 디버거에서이 작업을 수행했다는 의미였습니다. 프로그램을 단계별로 실행하지 않았습니까? 또한 이러한 실수를 피하기 위해 전체 경고 (심지어 경고는 오류라고 함)로 컴파일하십시오. – Pod

+2

Q : 오늘 우리는 무엇을 배웠습니까? 대답 : 수정 문자가 적을수록 버그를 찾기가 더 어려워집니다. A2 : 조건부 내에서 결코 과제를 수행하지 마십시오. –

2

코멘트를 추가 할 운명이 충분하지 않지만 cma 님의 답변이 정확하면 (조건부가 과제 여야 함) 원래 게시물이 수정되지 않았거나 적어도 그것이 고쳐 졌음을 주목하라. 나는 그 버그를 찾기 위해 오랜 시간을 보았고, 포기하고 대답을 읽기 전에.

누구나 할 수있는이 "대답"을 삭제하십시오.

+0

그래 ... 나는 똑같은 것을 궁금해했다. 나는 내 인생에서 그로 인해 무엇이 잘못되었는지 알아낼 수 없었다. : / – Zack