Allocation dynamique de memoire d'un tableau à 2 dimensions

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 857 fois - Téléchargée 33 fois

Contenu du snippet

Alors voila en fait je cherchais un pauvre exemple d'allocation dynamique de tableau a 2 dim et j'ai pas trouvé. Alors a force de demander a droite a gauche j'ai réussi et voila.

En gros c'est un code qui montre concretement comment faire cette opération.
C'est un exemple et je trouve ca plus parlant que de la théorie.

thx a payen qui m'a bien aidé, c'est son code aussi.

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
int main()
{

int nbl, nbc,j, i;
int **tableau;

printf("\n saisir le nombre de lignes :");
scanf("%d",&nbl);
printf("\n saisir le nombre de colones :");
scanf("%d",&nbc);

tableau = (int **)malloc(nbl * sizeof(int *));
if (tableau == NULL)
    printf("\nEchec lors de l'allocation memoire!!!");

for (int i=0;i<nbl;i++)
{
    tableau[i] = (int *)malloc(nbc * sizeof(int));
    if (tableau[i] == NULL)
    {
        for (int j=0;j<i;j++)
       {
           free(tableau[j]);
           
           printf("\n Echec lors de l'allocation memoire!!!");
        }
     }
}

// on remplis le tableau de chiffres 1 *****************
for(i=0;i<nbc;i++)
       {
       for(j=0;j<nbl;j++)
               {
               tableau[i][j]=1;
               }
       }
//on l'affiche *************************
for(i=0;i<nbc;i++)
       {
       for(j=0;j<nbl;j++)
               {
               printf(" %d ",tableau[i][j]);
               }
               printf("\n");
       }

scanf("%d",&i);
}

Conclusion :


j'ai mis un scanf("%d",&i); car le getch() ne voulait pas marcher c'est plus sauvage mais ca marche.

compilé avec devc++ 4

A voir également

Ajouter un commentaire

Commentaires

CherryBlondy
Messages postés
16
Date d'inscription
samedi 6 décembre 2008
Statut
Membre
Dernière intervention
3 mars 2009
-
Bonjour !

J'aurais aimé savoir si quelqu'un pouvait mettre un exemple d'allocation dynamique d'un tableau à deux dimensions dans un sous programme.

d'avance merci =)
dark_naruto25
Messages postés
127
Date d'inscription
mardi 23 août 2005
Statut
Membre
Dernière intervention
9 mai 2011
-
TRIZOLAKAI > Je suis désolé, mais ton exemple est très étonnant... ton ++i dans ta boucle for fait que tu ne vas pas allouer la case 0 de ton tableau.
Je me trompe peut être, dans ce gars je ne dirai plus rien, mais en C++ c'est parail qu'en C, sauf si on fait des erreurs comme toi.
Ciao
trizolakai
Messages postés
3
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
27 août 2005
-
c'est quand même plus simple en C++

tableau = new unsigned int*;
for(int i = 0; i < taille_x; ++i)
tableau[i] = new unsigned int[taille_y];

mais cette exemple ma servis merci ;)
cs_payen
Messages postés
252
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
1 mai 2005
-
Ca c'est clair, il manque la partie de desallocation. cela dit, c'est assez simple. Il faut rajouter ca :

for (i=0;i<nbl;i++)
free(tableau[i]);
free(tableau);

En ce qui concerne les index sur le tableau, c'est une simple inversion dans les boucles for : i doit varier de 0 a nbl et j de 0 a nbc, et non l'inverse comme c'est actuellement le cas dans le code ...
Ca devrait etre plus propre comme ca.
broks
Messages postés
9
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
12 mai 2004
-
il faudrait rajouter une partie pour desallouer la mémoire car ce nest pas si simple.....
D'ailleurs j ai les meme blèmes ke les autres, inversion des index et donc sa plante car tu vas dans des espaces memoire non alloués

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.