2010-12-08 23 views
0

Comment puis-je allouer dynamiquement un tableau bidimensionnel où chaque ligne contient un élément variable? Comment puis-je libérer cette mémoire?allouer dynamiquement un tableau bidimensionnel où chaque ligne contient un nombre variable d'éléments et le libérer en C++

+2

Si le nombre d'éléments varie, il est pas en fait un tableau 2D. C'est un tableau de tableaux. Oui, la distinction compte. –

+0

@Tyler Eaves: Il est parfois appelé un tableau 2D dentelé. La distinction est dans la mise en œuvre pas l'utilisation. –

Répondre

3

En fait, vous voulez probablement un vecteur de vecteurs, quelque chose comme ceci:

std::vector<std::vector<int> > vector_2d; 

De cette façon, vous bénéficierez de la gestion automatique de la mémoire du vecteur plutôt que d'avoir à gérer manuellement la mémoire d'un tableau de pointeurs vers des tableaux de données.

+0

Vous avez absolument raison - j'ai répondu trop rapidement. Cela rendra la tâche plus facile, mais aura un peu plus de frais généraux. – zsalzbank

0

Vous auriez besoin besoin d'utiliser des pointeurs:

int ** a; 
a = new (int*)[5]; 
for(int i = 0; i<5; i++) 
{ 
    a[i] = new int[x]; //where x is the size of this row 
} 

Quelque chose comme cela devrait fonctionner, mais je ne le tester.

+0

'a [i] = new int [x [i]];' serait mieux, si chaque rangée a un nombre différent d'éléments. –

+0

@ zubrycki..Qu'est-ce que x [i] signifie ici? Et comment le libérer? –

+0

pour (int i = 0; i <5; i ++) { delete [] a [i]; } –

0

Juste pour être complet:

int ** a; 
a = new (int*)[5]; 

for(int i = 0; i<5; i++) 
{ 
    a[i] = new int[x]; //where x is the size of this row 
} 

for(int i = 0; i<5; i++) 
{ 
    delete[] a[i]; 
} 

detete[] a; 
+0

boo sifflement. Je vois nouveau et supprimer. Je n'aime pas ça :-( –

+0

non plus, mais c'est bon d'apprendre les bases :) –