1

我在使用C++/CLI和Visual Studio 2010的問題奇怪的NullReferenceException儘管空檢查

我有一個使用一個指向socket像這樣網絡管理員:

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 
     ... 
    } 
} 

但我似乎得到一個NullReferenceException if條件。刪除return語句不會引發異常。

  • 在當前的代碼指針是總是 NULL,我將它設置爲NULL在構造函數中也再沒有分配給它。

  • 單步執行應用程序確實會出現這種情況,所以我不認爲棧跟蹤是錯誤的。

  • 我也嘗試添加一個布爾值,initalized在構造函數中爲false,並檢查相反,仍然是相同的問題。因此,我不認爲這是由於操作符重載

  • 我試過!= NULL爲好,

如果有人能夠給我一些指點(沒有雙關語意)同樣的事情,或者幫助我我會很感激! =)

+0

您可以發佈您使用的代碼(從聲明/初始化/實例化到錯誤點)嗎? – M4rc

+5

你是否可能從一個空的'NetworkManager'指針調用'socket_open'? – hvd

+0

來自hvd的評論是正確的,確實如此。謝謝! – ChewToy

回答

1

來自hvd的評論是正確的,我正在調用一個空的NetworkManger指針。結果堆棧跟蹤沒有那麼有用=)

感謝您的回覆!

1

你在製作一個指向NetworkManager對象的指針嗎?如果是的話,你是否驗證它不是NULL?