1

Visual Studio 2010 で C++/CLI を使用すると問題が発生します。

次のようなソケットへのポインターを使用するネットワークマネージャーがあります。

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 も試しましたが、同じことです

誰かが私にいくつかの指針を与えることができれば(しゃれた意図はありません)、私を助けてくれれば幸いです!=)

4

2 に答える 2

1

hvd からのコメントは正しかったです。null NetworkManger ポインターを呼び出していました。スタックトレースはそれほど役に立たないことがわかりました =)

お返事をありがとうございます!

于 2012-10-05T10:22:25.687 に答える
1

NetworkManager オブジェクトへのポインタを作成していますか? もしそうなら、それがNULLではないことを確認していますか?

于 2012-10-05T10:22:58.107 に答える