【发布时间】:2013-03-28 06:21:11
【问题描述】:
所以我有这个指针数组,它最多指向同一个基类的 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;
}
我也有这个 get 函数,它只返回路径数组:
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
paths数组的长度为[3],4个槽。为什么循环返回 5 个地址?还有为什么第四个地址不为空,而我肯定设置为NULL?
【问题讨论】:
-
当声明为
[3]时,只有 3 个插槽,而不是 4 个。您正在数组外部访问,这会导致未定义的行为。 -
您的调试循环没有任何意义。
current不是数组,为什么要用current[i].getPaths()? -
因为... current->getPaths()[i] 给了我一个错误。我尝试过这个。我看不到使用 current[i]->getPaths() 背后的逻辑。
标签: c++ arrays object pointers