2017-04-21 255 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年那樣編程。)