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

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

Répondre au sujet
cs_laurent1024 987 Messages postés mardi 31 mai 2005Date d'inscription 30 août 2012 Dernière intervention - 9 août 2006 à 16:39
+1
Utile
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);


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

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