所以我有这个指针数组指向最多4个相同基类的对象。对象指针数组返回一个更多的值?
private:
Instance* paths[3];
如果我想指向一个对象,我将指向一个指向数组插槽的指针。如果没有任何指向,则为NULL。
我有这样的设置功能做到这一点:
void Instance::setNearbyObjects(Instance* north,Instance* east,Instance* south,Instance* west)
{
paths[0]=north;
paths[1]=east;
paths[2]=south;
paths[3]=west;
}
我也有这个获取函数,仅仅返回路径数组:
Instance* Instance::getPaths()
{
return *paths;
}
然后我尝试使用for循环周期通过该数组找到哪个插槽没有NULL。基于此,我向用户输出了一些东西:
string nesw[4] = {"(N)orth","(E)ast","(S)outh","(W)est"};
for(int i=0;i<=(sizeof(current->getPaths());i++)
{
if(current[i].getPaths()!=NULL)
{
cout<<nesw[i].c_str()<<", ";
}
}
这就是奇怪的东西开始发生的地方。由于该回路的输出是错误的,我写了一个调试圈,看看究竟是什么路径数组里面: 考虑这种情况: 我跑setNearbyObjects()函数将这些数据分配给路径数组:
current->setNearbyObjects(NULL,objPointerA,objPointerB,NULL);
然后运行这个循环打印输出到控制台屏幕:
for(int i=0;i<=sizeof(current->getPaths());i++)
{
cout<<current[i].getPaths()<<endl;
}
我预计产量为这样的:
00000000
ABABABAB
007E8F28
00000000
但它实际上是:
00000000
ABABABAB
007E8F28
00000001
ABABABAB
路径数组的长度是[3],4个槽。为什么循环返回5个地址?为什么第四个地址不为空,当我将它设置为NULL?
当声明是'[3]'仅存在3个时隙,而不是4.您正在访问数组之外,这会导致未定义的行为。 – Barmar 2013-03-28 06:23:11
你的调试循环没有任何意义。 'current'不是一个数组,为什么你使用'current [i] .getPaths()'? – Barmar 2013-03-28 06:38:04
因为... current-> getPaths()[i]给了我一个错误。我尝试过这个。我看不到使用current [i] - > getPaths()的逻辑。 – eltaro 2013-03-28 09:05:57