2012-03-17 10 views
-3

私のブールの予期しない値を受け取り続ける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

いいえ、それはコンパイルされていません。この関数はvoidであり、コールサイトの '* pOk'が実際には' bool'へのポインタであるとは考えていません。あなたが実際のコードを投稿した場合、それは役に立ちます。コピー/貼り付けを使用します。そして奇妙な結果が得られたら、その結果が何であるかを推測させないでください。あなたの質問にそれらを含める。 –

答えて

6

あなたは1を参照セマンティクスを実装するためにポインタを使用する方法の基本的な誤解があります。

*pOK = ok; 

をしかし、C++が実際に好ましいかもしれない参照型を通じてネイティブに参照セマンティクスをサポートしています:

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

さらに良いあなたはは、ポインタによって指される事を変更したいですしかし、単純に返信 bool:

+0

戻り値を返さないようにしたい。 * pOkが指しているものを変更したいのは意味があります。そこでIF文の内容を{* pOk = false;}に変更しました。 }私は実行すると私のプログラムがクラッシュします。 – user27279

+1

@cupcake_lover私たちの時間を無駄にしている実際のコードを投稿できるようになるまで。作成されたコードをデバッグしようとしても意味がありません。 CTRL + C、CTRL + V、クリップボードを使用します。 –

+0

@DavidHeffernan申し訳ありませんが、私は実際のコードを追加しました。私は可能な限り明確にしたいので、私は偽のコードを使用しました。 – user27279

関連する問題