我有一个如下所示的代码
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 ++中出现任何问题吗?
答案 0 :(得分:3)
if (((agent == NULL)|| (agent->type == SPUES_ntAgent)) && (agent->type == 0))
如果座席是NULL
,那么&&
的左侧将始终为真,并且始终会访问agent->type
。因此,NULL
代理会确保NULL
取消引用。
您应该更改代码,以确保只有取消引用,如果它不是NULL。
答案 1 :(得分:2)
我认为你想移动(),以便你永远不要取消引用指针,如果它是NULL:
if ((agent == NULL)|| ((agent->type == SPUES_ntAgent) && (agent->type == 0))) {
答案 2 :(得分:2)
问题是你可以达到这个
agent->type == 0
agent==NULL
时。
我无法评论如何在不知道您期望的行为的情况下进行修复。至少,如果agent
==NULL
,则应确保{{1}}不被取消引用。