1

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

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

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,并且不再分配给它。

  • 单步执行应用程序确实会引发条件,所以我认为堆栈跟踪没有错。

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

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

如果有人能够给我一些指示(不是双关语)或帮助我,我将不胜感激!=)

4

2 回答 2

1

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

感谢您的回复!

于 2012-10-05T10:22:25.687 回答
1

您是否正在创建指向 NetworkManager 对象的指针?如果是这样,您是否正在验证它不是 NULL?

于 2012-10-05T10:22:58.107 回答