如何检查指针数组中的c ++对象指针是否已设置

时间:2014-02-16 11:27:59

标签: c++ pointers

我已经定义了像这样的指针数组:

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的元素时失败 当没有设置指针时,它会在数组元素中找到它 我得到这个错误:

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);
        }
       }
    }
 }

我的问题很简单,我如何检查数组中的元素是否包含对象指针?

更新:
如果我不想设置wite循环所有元素,最好只使用map作为工作

1 个答案:

答案 0 :(得分:1)

添加到class ComponentMadiator,一个构造函数,它将数组中的所有条目初始化为NULL

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

顺便说一句,你的代码中还有一些其他的空洞:

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

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