Allocation dynamique, tableau à 2 dimensions [Résolu]

Signaler
Messages postés
9
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
10 mars 2007
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Salut
Mon problème est simple (la solution je ne sais pas). Je veux faire une allocation dynamique pour un tableau à deux dimensions.


Alors pour un tableau normal on fait:


    int* tableau = NULL;

    tableau = malloc(largeur * sizeof(int));


Mais pour un tableau à deux dimensions ??


Merci pour vos futures réponses.

7 réponses

Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
17
int ** tableau2d = malloc(nblignes*sizeof(int));

for(int i = 0, i < nblignes; ++i)

{

    tableau2d[i] = malloc(nbcolonnes*sizeof(int));

}

apres tableau2d[x][y] pour acces aux elements


la suppression ce fait de la meme facom

for(int i = 0, i < nblignes; ++i)


{


    free(tableau2d[i]);


}

free(tableau2d);


++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Ah oups j'avais pas vue la date de création de ce post...

C++ (@++)
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
pour un tableau a deux dimensions , soit t'as pas peur de t'embrouiller
et tu fais largeur * hauteur * sizeof(int) , soit t'utilise une
structure de donnée autre comme les vecteurs par exemple, enfin tu peux
aussi faire un tableau de tableau .
rrk275
Messages postés
9
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
10 mars 2007

Merci pour vos réponses. Sujet résolu.
Messages postés
2
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
7 janvier 2009

Pour une version sans les crochets "[ ]":




int **tab;
int lig,col,i,j;
 
    puts("Nb lignes ?");
    scanf("%d",&lig);
    puts("Nb colonnes ?");
    scanf("%d",&col);
 
 tab=(int**)calloc(lig,sizeof(int*));
 
 for(i=0;i<lig;i++){
            *(tab+i)=(int*)calloc(col,sizeof(int));
            for(j=0;j<col;j++) tab[i][j]=1; //pour initialiser à autre chose que 0.
    }

//affichage matriciel
  
  for(i=0;i<lig;i++) {
       for(j=0;j<col;j++) {
            if(j == (col-1)) printf(" %d \n", *(*(tab+i)+j) );             
            else printf(" %d ", *(*(tab+i)+j) );
          }
     }
Messages postés
2
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
7 janvier 2009

Pour une version sans les crochets "[ ]":




int **tab;
int lig,col,i,j;
 
    puts("Nb lignes ?");
    scanf("%d",&lig);
    puts("Nb colonnes ?");
    scanf("%d",&col);
 
 tab=(int**)calloc(lig,sizeof(int*));
 
 for(i=0;i<lig;i++){
            *(tab+i)=(int*)calloc(col,sizeof(int));
            for(j=0;j<col;j++) tab[i][j]=1; //pour initialiser à autre chose que 0.
    }

//affichage matriciel
  
  for(i=0;i<lig;i++) {
       for(j=0;j<col;j++) {
            if(j == (col-1)) printf(" %d \n", *(*(tab+i)+j) );             
            else printf(" %d ", *(*(tab+i)+j) );
          }
     }
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Un autre façon d'allouer la mémoire pour un pointeur de pointeurs:
http://www.codyx.org/snippet_allocateur-pointeur-pointeurs_293.aspx

Plus rapide que de faire une boucle d'allocation (et de désallocation).

C++ (@++)