所以我有這個指針數組指向最多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