2017-04-21 92 views
0

我想写一个函数,它返回指向二维指针数组的指针。我有这样的数组:Organism* worldTab[20][20];和我的朋友劝写我想这样的功能:指针的二维数组

Organism** getWorldTab() { 
    return worldTab[20]; 
} 

它是正确的吗?当我想这样做(tempOrganism*** temp;):

*temp = world.getWorldTab(); 

Visual Studio中抛出一个异常

Exception thrown: write access violation. 

    this->temp was 0xCCCCCCCC. 

,我敢肯定getWorldTab()功能是一个问题。

worldTab定义:Organism* worldTab[20][20];

+5

'worldTab [20]'超出界限。 –

+1

您需要提供更多的上下文。在哪里定义了“worldTab”? – tadman

+2

请阅读http://stackoverflow.com/help/mcve并编辑您的问题 – Sniper

回答

1

数组不是指针,虽然它可以在某些情况下被转换成一个指向它的第一元件,和一个指针数组是完全不同于指向指针的指针。

指向您阵列的指针的类型为Organism* (*)[20][20]

指向数组的第一个元素的指针可能是您的朋友想要的,但其类型为Organism* (*)[20],而不是Organism**Organism***,并且无法转换为其中之一。

(而且,作为奖金,worldTab[20]是出界的,因为这将是存在二十的二十一数组。而且你分配给*temp,这是访问冲突源之前从未初始化temp。 )

虽然可以编写

Organism* (*getWorldTab())[20] { 
    return &worldTab[0]; 
} 

Organism* (*temp)[20] = getWorldTab(); 

或者干脆

Organism* (*temp)[20] = worldTab; 

我想你应该学会使用std::vectorstd::array - 他们可以减轻很多痛苦。
(另外,它是2017年。虽然它可能很有趣,但没有必要像1969年那样编程。)