Allocation dynamique de memoire d'un tableau à 2 dimensions

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 787 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

cs_payen
Messages postés
252
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
1 mai 2005
-
tain', t'est gonfle GazGaz!!! je viens de tout te filer, tout le code, et tu me mets meme pas les remerciements?!? pas cool ...
cs_payen
Messages postés
252
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
1 mai 2005
-
merde, j'avais pas tout lu ... MEA CULPA ... et encore desole GazGaz
revinc
Messages postés
385
Date d'inscription
mardi 15 octobre 2002
Statut
Membre
Dernière intervention
19 décembre 2017
-
c vrai que ça peut être utile mais question rapidité c pas le top...
enfin, on peut pas tout avoir
cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2 -
Tu as declarer les variables 'i' et 'j' dans le main.
Tu les redeclares dans les boucles 'for' ???

C'est bien de tester si l'allocation memoire marche.
Le jour ou 'malloc' retournera 'NULL' tu affiches
a l'ecran un message, mais apres il ne faut pas continuer !

Ton 'main' est prototyper comme retournant un 'int',
Donc a la fin du 'main' tu pourrait faire 'return 0;'

Chez moi quand je rentre '5' puis '6', ca plante !!!
(a la ligne 'tableau[i][j]=1;' )
cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2 -
J'ai trouver ton BUG :
dans tes boucles 'for' imbriquees, tu fait 'tableau[i][j]=1;' !!!!!!
He bien il faut plutot faire 'tableau[j][i]=1;' !!!!!

Il faut changer 'i' avec 'j', en C c'est comme ca !!!!!
Maintenant ca marche du tonnerre !!!!

En C, si on ecrit 'tableau[a][b]', c'est 'a' qui choisi dans quel tableau on va se mettre, le 'b' dans sur quel entier on va se mettre (dans le tableau choisi par 'a)

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.