0

以下のようなコードがあります

if ((client == NULL) || (client->type == Leave_Agent)) {

しかし、次のコードで変更すると、イベントログにエラーが表示されます 変更されたコードを以下に示します

if (((client == NULL)|| (client->type == Leave_Agent)) && (client->type == 0)) {

イベントログのエラーは

Faulting application name: test.exe, version: 8.0.16.0, time stamp: 0x5036427e

&& 演算子は c++ で問題を引き起こしますか?

4

3 に答える 3

3
if (((agent == NULL)|| (agent->type == SPUES_ntAgent)) && (agent->type == 0))

agent の場合NULL、 の左側&&は常に true になり、agent->type常にアクセスされます。したがって、NULLエージェントはNULL逆参照を保証します。

NULL でない場合にのみ逆参照されるように、コードを変更する必要があります。

于 2012-08-23T15:00:03.147 に答える
2

() を移動して、ポインターが NULL の場合にポインターを逆参照しないようにしたいと思います。

if ((agent == NULL)|| ((agent->type == SPUES_ntAgent) && (agent->type == 0))) {
于 2012-08-23T14:59:49.323 に答える
2

問題は、これに到達できることです

agent->type == 0

いつagent==NULL

あなたが期待する動作を知らずに、修正方法についてコメントすることはできません。少なくとも、 がagent逆参照されていないことを確認する必要があり==NULLます。

于 2012-08-23T15:00:12.757 に答える