Libérer la mémoire d'un tableau 2D dynamique
Résolu
kevdaig
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'aimerais pouvoir libérer la mémoire des tableaux 2D alloués dynamiquement dans mon programme à l'aide d'une fonction qui elle renfermera le "free". Le problème est que l'adresse de mon tableau ne semble pas être passée en paramètre et j'ai des erreurs de violation d'accès :-(
Voici mon code:
int main(void)
{
...
int** GrilleDeJeu=NULL;
CreerGrilleJeu(GrilleDeJeu,Largeur,Hauteur);
LibereMemoire(GrilleDeJeu,Largeur);
system ("pause");
return EXIT_SUCCESS;
}
void CreerGrilleJeu(int** GrilleDeJeu, int Largeur, int Hauteur)
{
//Variables d'itération
int i;
int j;
// Alloue le tableau de pointeurs d'entier
GrilleDeJeu = (int**) malloc(sizeof(int*) * (Largeur));
// Alloue chacun des espaces contigus du tableau d'entier
for (i = 0; i < Largeur; i++)
{
GrilleDeJeu[i] = (int*) malloc(sizeof(int) * (Hauteur));
}
}
void LibereMemoire(int** GrilleDeJeu, int Largeur)
{
//Variable d'itération
int i;
// Libere l'espace mémoire des entiers
for (i = 0; i < Largeur; i++)
{
free(GrilleDeJeu[i]);
}
//Libère l'espace mémoire des pointeurs d'entier
free(GrilleDeJeu);
// Met le pointeur à nul
GrilleDeJeu = NULL;
}
Quelqu'un peut m'aider?
J'aimerais pouvoir libérer la mémoire des tableaux 2D alloués dynamiquement dans mon programme à l'aide d'une fonction qui elle renfermera le "free". Le problème est que l'adresse de mon tableau ne semble pas être passée en paramètre et j'ai des erreurs de violation d'accès :-(
Voici mon code:
int main(void)
{
...
int** GrilleDeJeu=NULL;
CreerGrilleJeu(GrilleDeJeu,Largeur,Hauteur);
LibereMemoire(GrilleDeJeu,Largeur);
system ("pause");
return EXIT_SUCCESS;
}
void CreerGrilleJeu(int** GrilleDeJeu, int Largeur, int Hauteur)
{
//Variables d'itération
int i;
int j;
// Alloue le tableau de pointeurs d'entier
GrilleDeJeu = (int**) malloc(sizeof(int*) * (Largeur));
// Alloue chacun des espaces contigus du tableau d'entier
for (i = 0; i < Largeur; i++)
{
GrilleDeJeu[i] = (int*) malloc(sizeof(int) * (Hauteur));
}
}
void LibereMemoire(int** GrilleDeJeu, int Largeur)
{
//Variable d'itération
int i;
// Libere l'espace mémoire des entiers
for (i = 0; i < Largeur; i++)
{
free(GrilleDeJeu[i]);
}
//Libère l'espace mémoire des pointeurs d'entier
free(GrilleDeJeu);
// Met le pointeur à nul
GrilleDeJeu = NULL;
}
Quelqu'un peut m'aider?
A voir également:
- Tableau croisé dynamique libérer de l'espace
- Tableau croisé dynamique - Guide
- Libérer espace gmail - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Espace insécable - Guide
- Tableau word - Guide
J'ai fait les modifs, je n'ai plus de problème pour remplir mon tableau mais je n'arrive toujours pas à libérer la mémoire avec le free...
Merci encore!
Il faut passer par void CreerGrilleJeu(int*** GrilleDeJeu, int Largeur, int Hauteur)
Lors de l'appel : CreerGrilleJeu(&GrilleDeJeu, ...);
Et dans la fonction CreeGrilleJeu, il te suffit de remplacer GrilleDeJeu par (*GrilleDeJeu).
Note : sinon, tu peux passer par : char **CreerGrilleJeu(int Largeur, int Hauteur);