2017-04-21 1 views
0

Je souhaite écrire une fonction qui renvoie un pointeur sur un tableau bidimensionnel de pointeurs. J'ai ce tableau: Organism* worldTab[20][20]; et mon ami a conseillé d'écrire la fonction que je veux ainsi:Tableau bidimensionnel de pointeurs

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

est-il exact? Quand je veux faire (temp est Organism*** temp;):

*temp = world.getWorldTab(); 

Visual Studio lance une exception

Exception thrown: write access violation. 

    this->temp was 0xCCCCCCCC. 

et je suis assez sûr getWorldTab() fonctions est un problème.

définition worldTab: Organism* worldTab[20][20];

+5

'worldTab [20]' est hors limites. –

+1

Vous devez donner plus de contexte. Où est défini 'worldTab'? – tadman

+2

S'il vous plaît lire http://stackoverflow.com/help/mcve et Modifier votre question – Sniper

Répondre

1

Un tableau n'est pas un pointeur, mais il peut être converti en un pointeur vers son premier élément dans certaines situations, et un pointeur vers un tableau est complètement différent d'un pointeur vers un pointeur.

Un pointeur vers votre tableau a le type Organism* (*)[20][20]. Un pointeur vers le premier élément du tableau est probablement ce que votre ami avait en tête, mais il a le type Organism* (*)[20], et non Organism** ou Organism***, et ne peut pas être converti en un autre.

(Et, en prime, worldTab[20] est hors des limites parce que ce serait la vingt et unième série de vingt qui existent. Et vous n'initialisées temp avant d'attribuer à *temp, qui est la source de la violation d'accès.)

Alors que vous pouvez écrire

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

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

ou simplement

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

Je pense vous devriez apprendre à utiliser std::vector et std::array - ils soulagent beaucoup de douleur.
(De plus, c'est 2017. Bien que cela puisse être intéressant, il n'est pas nécessaire de programmer comme si c'était 1969.)