2012-03-17 4 views
-3

내 bool에 대한 예기치 않은 값이 계속 나타납니다 testValue. 다른 영역의 메모리에 액세스하려고한다고 생각할 때 난 계속 임의의 숫자를받습니다. 내 코드가 내 testNumber() 함수 내에서 설정되는 방법을 예측하지만,이를 해결하는 방법은 확실하지 않습니다. 이게 내 논리 야.C++ - 포인터를 함수에 전달

나는 ok을 true로 설정했습니다. 이제 ok의 메모리 주소를 pOk에 할당합니다.

void TextBox::lengthTest(bool *pOk, int length) { 
    bool ok; 

    if (length < MAX_LENGTH) { 
    ok = true; 
    pOk = &ok; 
    } else { 
    ok = false; 
    pOk = &ok; 
    } 
} 

bool lengthTestBool = lengthTest(*pOk, length); 
cout << lengthTestBool <<; 

출력 :

85 
+0

와우, 이건 실제로 컴파일되는거야? –

+0

예. 나는 이상한 결과를 얻는다. – user27279

+3

아니요 컴파일 중입니다. 이 함수는 무효이며 호출 사이트의'* pOk'가 실제로'bool'에 대한 포인터라고 믿지 않습니다. 실제 코드를 게시하면 도움이 될 것입니다. 복사/붙여 넣기를 사용하십시오. 그리고 이상한 결과가 나오면 그 결과가 무엇인지 추측하지 마십시오. 귀하의 질문에 그들을 포함시킵니다. –

답변

6

당신은 하나의 참조 시멘틱스를 구현하기 위해 포인터를 사용하는 방법의 근본적인 오해가있다. 바람직 할 수있다 기본적으로 참조 유형을 통해

*pOK = ok; 

그러나 C++에서 실제로 참조 의미를 지원합니다 :

void testNumber(bool & OK, int n) 
{ 
    OK = true; 
    // ... 
} 

더 나은 당신은 포인터에 의해 가리키는 일을 변경하려면 하지만 간단히 이 반환됩니다. bool :

bool testNumber(int n) { /* ... */ } 

if (testNumber(x)) //... etc. 
+0

아무 값도 반환하지 않으려 고 노력하고 싶습니다. * pOk가 가리키고있는 것을 변경하고 싶다. 그래서 IF 문 내용을 {* pOk = false; }하지만 실행하면 프로그램이 다운됩니다. – user27279

+1

@cupcake_lover 당신이 우리의 시간을 낭비하고있는 실제 코드를 게시 할 때까지. 작성된 코드를 디버그 할 필요가 없습니다. Ctrl + C, Ctrl + V 및 클립 보드를 사용하십시오. –

+0

@DavidHeffernan 죄송합니다. 제 실제 코드를 추가했습니다. 가짜 코드는 가능한 한 명확하게 만들고 싶었 기 때문에 가짜 코드를 사용했습니다. – user27279

관련 문제