我已经定义了像这样的指针数组:
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作为工作
答案 0 :(得分:1)
添加到class ComponentMadiator
,一个构造函数,它将数组中的所有条目初始化为NULL
:
ComponentMadiator::ComponentMadiator()
{
for (int i=0; i<COMPONENT_SIZE; i++)
components[i] = NULL;
}
顺便说一句,你的代码中还有一些其他的空洞:
检查isSet!=NULL
完全是多余的。它似乎是true
或false
。
在函数Register
中,您使用PuzzleObj
作为type-name和variable-name。