0

次のように、C++ で非常に単純なポインター割り当てを記述しようとしています。

float  *src;
if(someCondition == true)
    src = somePointer;
else
    src = someOtherPointer;

しかし、srcにアクセスしようとすると、「ヌルポインタの逆参照(変数srcからロード)」という警告が出ます。

また、次のように src に初期値を与えようとすると:

float  *src = aPointer;

if(someCondition == true)
    src = somePointer;
else
    src = someOtherPointer;

src に割り当てられた初期値が読み込まれないという警告が表示されます。これは私がやろうとしていることに影響しているようには見えませんが、潜在的な問題をすべて取り除こうとしています。ここで何が問題になっているようですか?

どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

2

おそらく と の一方または両方somePointersomeOtherPointer0/NULLである

于 2013-03-05T19:58:30.967 に答える
2

NULL参照ではなくポインターを使用しているため、ポインターの可能な値になると予想されます。

NULL をチェックすることはあなたの興味があるかもしれません:

if(!src) {/*handle null case*/}
于 2013-03-05T20:00:30.820 に答える
0

srcコンパイラは、常に初期化されることを認識するほど賢くないようです。IDK では、poiter が NULL であると想定する理由はありますが、ガベージ値である可能性が高いです。これはおそらく、初期化を三項演算子 (?:) を使用して単一のステートメントにすることで修正できます。

float* src = someCondition ? somePointer : someOtherPointer;

編集:

srcNULL に初期化してみてください。これにより、初期化の警告が取り除かれ、未使用の値の警告が作成されるとは思えません。

于 2013-03-05T20:08:48.010 に答える