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

cs_seb013
Messages postés
9
Date d'inscription
mercredi 9 août 2006
Dernière intervention
10 mars 2007
- 9 août 2006 à 16:09 - Dernière réponse : SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
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 

Votre réponse

7 réponses

Meilleure réponse
cs_laurent1024
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
- 9 août 2006 à 16:39
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);


++

Merci cs_laurent1024 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_laurent1024
Meilleure réponse
SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
- 7 janv. 2009 à 17:59
1
Merci
Ah oups j'avais pas vue la date de création de ce post...

C++ (@++)

Merci SAKingdom 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de SAKingdom
rrk275
Messages postés
542
Date d'inscription
vendredi 25 juin 2004
Dernière intervention
1 octobre 2007
- 9 août 2006 à 16:33
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
cs_seb013
Messages postés
9
Date d'inscription
mercredi 9 août 2006
Dernière intervention
10 mars 2007
- 9 août 2006 à 17:22
0
Merci
Merci pour vos réponses. Sujet résolu.
Commenter la réponse de cs_seb013
marcello_mat
Messages postés
2
Date d'inscription
mardi 11 avril 2006
Dernière intervention
7 janvier 2009
- 7 janv. 2009 à 16:09
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
marcello_mat
Messages postés
2
Date d'inscription
mardi 11 avril 2006
Dernière intervention
7 janvier 2009
- 7 janv. 2009 à 16:09
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
SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
- 7 janv. 2009 à 17:15
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

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.