2014-02-16 38 views
-3

我已經定義指針數組是這樣的:如何檢查是否在指針數組C++對象指針設置

private: 
     PuzzleObj * components[COMPONENT_SIZE]; 

中相應的定義文件我有一個方法來設置對象指針

void ComponentMadiator::Register(PuzzlePartLocation puzzlePartLocation,PuzzleObj* PuzzleObj) 
{ 
    if(components[puzzlePartLocation]!=NULL || components[puzzlePartLocation]->isSet!=NULL || components[puzzlePartLocation]->isSet==true) 
    { 
     components[puzzlePartLocation] = PuzzleObj; 
    } 
} 

並在這裏我檢查指針數組失敗,當它得到元素,沒有bean set 它失敗時,未設置指針是在數組元素 中發現和即時獲取此錯誤:

Unhandled exception at 0x00B90646 in Breaker.exe: 0xC0000005: Access violation reading location 0xCDCDD0D1. 

void ComponentMadiator::SendMassage(Massage massage) 
{ 
    for (int i = 0; i < COMPONENT_SIZE; i++) 
    { 

     if(components[i]!=NULL && components[i]->isSet!=NULL) 
     { 
     if(components[i]->isSet!=false) 
     { 
     components[i]->Notify(massage); 
     } 
     } 
    } 
} 

我的問題很簡單我如何檢查數組中是否包含元素包含對象指針?

UPDATE:
如果我不希望設置WITE循環中的所有元素,更好的只是用地圖作業

+2

你不能檢查。你必須確保你首先正確地初始化你的數據。 –

+0

我只初始化當我需要註冊對象 – user63898

+0

我建議你閱讀[指針](http://www.cplusplus.com/doc/tutorial/pointers/)和[動態內存分配](http: //www.cplusplus.com/doc/tutorial/dynamic/) 繼續之前 – goozez

回答

1

添加到class ComponentMadiator,初始化數組中的所有條目NULL構造:

ComponentMadiator::ComponentMadiator() 
{ 
    for (int i=0; i<COMPONENT_SIZE; i++) 
     components[i] = NULL; 
} 

BTW,也有你的代碼的一些其他空腔:

  1. 檢查isSet!=NULL是完全多餘的。它似乎是truefalse

  2. 在函數Register中,您使用PuzzleObj作爲type-name和variable-name。

+0

有沒有其他方式然後循環vi 100元素? 也許某種檢查我可以添加到每個類? – user63898

+0

在C/C++中沒有確定的方式來斷言未初始化的變量。 –

+0

不要忘記||運算符將在空檢查上返回false,然後繼續檢查未分配對象的isSet方法。 @ user63898你想要一個&&。除了有一個空對象發送一個清晰的信息「這個對象沒有設置」。 – goozez