Allocation dynamique, tableau à 2 dimensions

Résolu
cs_seb013
Messages postés
9
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
10 mars 2007
- Modifié le 27 nov. 2021 à 10:32
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
- 7 janv. 2009 à 17:59
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

cs_laurent1024
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
26
Modifié le 27 nov. 2021 à 10:33
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);


++
9
marcello_mat
Messages postés
2
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
7 janvier 2009
2
Modifié le 27 nov. 2021 à 10:33
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) );
          }
     }
2
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
7 janv. 2009 à 17:59
Ah oups j'avais pas vue la date de création de ce post...

C++ (@++)
1
rrk275
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
9 août 2006 à 16:33
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_seb013
Messages postés
9
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
10 mars 2007

9 août 2006 à 17:22
Merci pour vos réponses. Sujet résolu.
0
marcello_mat
Messages postés
2
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
7 janvier 2009
2
Modifié le 27 nov. 2021 à 10:34
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) );
          }
     }
0
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
7 janv. 2009 à 17:15
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++ (@++)
-1