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

Messages postés
9
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
10 mars 2007
- - Dernière réponse : SAKingdom
Messages postés
3213
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.
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
11
1
Merci
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);


++

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 218 internautes nous ont dit merci ce mois-ci

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

C++ (@++)

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 218 internautes nous ont dit merci ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
542
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
0
Merci
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
Commenter la réponse de rrk275
Messages postés
9
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
10 mars 2007
0
Merci
Merci pour vos réponses. Sujet résolu.
Commenter la réponse de cs_seb013
Messages postés
2
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
7 janvier 2009
0
Merci
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) );
          }
     }
Commenter la réponse de marcello_mat
Messages postés
2
Date d'inscription
mardi 11 avril 2006
Statut
Membre
Dernière intervention
7 janvier 2009
0
Merci
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) );
          }
     }
Commenter la réponse de marcello_mat
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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++ (@++)
Commenter la réponse de SAKingdom