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++
Répondre
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.
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
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.
'a [i] = new int [x [i]];' serait mieux, si chaque rangée a un nombre différent d'éléments. –
@ zubrycki..Qu'est-ce que x [i] signifie ici? Et comment le libérer? –
pour (int i = 0; i <5; i ++) { delete [] a [i]; } –
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;
boo sifflement. Je vois nouveau et supprimer. Je n'aime pas ça :-( –
non plus, mais c'est bon d'apprendre les bases :) –
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. –
@Tyler Eaves: Il est parfois appelé un tableau 2D dentelé. La distinction est dans la mise en œuvre pas l'utilisation. –