奇怪的NullReferenceException,尽管进行了null检查

Strange NullReferenceException despite null check

本文关键字:null 检查 NullReferenceException      更新时间:2023-10-16

我在Visual Studio 2010中使用C++/CLI时遇到问题。

我有一个网络管理器,它使用一个指向套接字的指针,如下所示:

class NetworkManager{
public:
SOCKET socket_open(char* local_ip_addr, int local_port);
private:
SOCKET* masterServerSocket;
};

当我想使用指针时,我会检查指针是否为空,如下所示:

SOCKET NetworkManager::socket_open(char* local_ip_addr, int local_port)
{
if (masterServerSocket) {
return *masterServerSocket;
} else {
// Initalize mastersocket
...
}
}

但我似乎在if条件下得到了一个NullReferenceException。删除return语句不会产生异常。

  • 在当前代码中,指针总是NULL,我在构造函数中将其设置为NULL,以后再也不会分配给它。

  • 通过应用程序,它确实被抛出了条件,所以我不认为stacktrace是错误的。

  • 我还尝试添加一个布尔值,在构造函数中初始化为false,并对此进行检查,但仍然存在相同的问题。所以我不认为这是由于操作员超载

  • 我试过了NULL也是一样,

如果有人能给我一些建议(并非双关语)或帮助我,我将不胜感激!=)

hvd的注释是正确的,我调用了一个空的NetworkManger指针。事实证明堆叠竞争没有那么大帮助=)

谢谢你的回复!

是否正在制作指向NetworkManager对象的指针?如果是,您是否正在验证它不是NULL?