尽管空检查,但是奇怪的NullReferenceException

时间:2012-10-05 10:07:26

标签: c++ visual-c++ c++-cli nullpointerexception nullreferenceexception

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

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

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

当我想使用指针时,我将指针检查为null,如下所示:

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

但我似乎在if条件上得到NullReferenceException。删除return语句不会出现异常。

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

  • 单步执行应用程序确实会遇到这种情况,所以我认为堆栈跟踪不对。

  • 我还尝试添加一个布尔值,在构造函数中初始化为false,然后对其进行检查,仍然是同样的问题。所以我认为这不是由于运营商超载

  • 我试过!= NULL,同样的事情

如果有人能给我一些指示(没有双关语意)或帮助我,我会很感激! =)

2 个答案:

答案 0 :(得分:1)

来自hvd的评论是正确的,我正在调用一个null NetworkManger指针。原来堆栈跟踪不是那么有用=)

感谢您的回复!

答案 1 :(得分:1)

您是否正在指向NetworkManager对象?如果是,你验证是不是NULL?