begin process at 2010 03 21 15:32:26
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > ALLOCATION DYNAMIQUE DE MEMOIRE D'UN TABLEAU À 2 DIMENSIONS

ALLOCATION DYNAMIQUE DE MEMOIRE D'UN TABLEAU À 2 DIMENSIONS


 Information sur la source

Note :
6,33 / 10 - par 3 personnes
6,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Niveau :Débutant Date de création :10/06/2003 Date de mise à jour :10/06/2003 22:55:59 Vu :12 231

Auteur : GazGaz

Ecrire un message privé
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 Description

Alors voila en fait je cherchais un pauvre exemple d'allocation dynamique de tableau a 2 dim et j'ai pas trouvé. Alors a force de demander a droite a gauche j'ai réussi et voila.

En gros c'est un code qui montre concretement comment faire cette opération.
C'est un exemple et je trouve ca plus parlant que de la théorie.

thx a payen qui m'a bien aidé, c'est son code aussi.

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • int main()
  • {
  • int nbl, nbc,j, i;
  • int **tableau;
  • printf("\n saisir le nombre de lignes :");
  • scanf("%d",&nbl);
  • printf("\n saisir le nombre de colones :");
  • scanf("%d",&nbc);
  • tableau = (int **)malloc(nbl * sizeof(int *));
  • if (tableau == NULL)
  • printf("\nEchec lors de l'allocation memoire!!!");
  • for (int i=0;i<nbl;i++)
  • {
  • tableau[i] = (int *)malloc(nbc * sizeof(int));
  • if (tableau[i] == NULL)
  • {
  • for (int j=0;j<i;j++)
  • {
  • free(tableau[j]);
  • printf("\n Echec lors de l'allocation memoire!!!");
  • }
  • }
  • }
  • // on remplis le tableau de chiffres 1 *****************
  • for(i=0;i<nbc;i++)
  • {
  • for(j=0;j<nbl;j++)
  • {
  • tableau[i][j]=1;
  • }
  • }
  • //on l'affiche *************************
  • for(i=0;i<nbc;i++)
  • {
  • for(j=0;j<nbl;j++)
  • {
  • printf(" %d ",tableau[i][j]);
  • }
  • printf("\n");
  • }
  • scanf("%d",&i);
  • }
#include <stdio.h>
#include <stdlib.h>
int main()
{


int nbl, nbc,j, i;
int **tableau;

printf("\n saisir le nombre de lignes :");
scanf("%d",&nbl);
printf("\n saisir le nombre de colones :");
scanf("%d",&nbc);


tableau = (int **)malloc(nbl * sizeof(int *));
if (tableau == NULL)
    printf("\nEchec lors de l'allocation memoire!!!");

for (int i=0;i<nbl;i++)
{
    tableau[i] = (int *)malloc(nbc * sizeof(int));
    if (tableau[i] == NULL)
    {
        for (int j=0;j<i;j++)
       {
           free(tableau[j]);
           
           printf("\n Echec lors de l'allocation memoire!!!");
        }
     }
}

// on remplis le tableau de chiffres 1 *****************
for(i=0;i<nbc;i++)
       {
       for(j=0;j<nbl;j++)
               {
               tableau[i][j]=1;
               }
       }
//on l'affiche *************************
for(i=0;i<nbc;i++)
       {
       for(j=0;j<nbl;j++)
               {
               printf(" %d ",tableau[i][j]);
               }
               printf("\n");
       }

scanf("%d",&i);
}

 Conclusion

j'ai mis un scanf("%d",&i); car le getch() ne voulait pas marcher c'est plus sauvage mais ca marche.

compilé avec devc++ 4


 Sources du même auteur

RECHERCHE D'UN CARACTERE SPÉCIFIQUE DANS UNE CHAINE DE CARAC...

 Sources de la même categorie

Source avec une capture CONVERTISSEUR par smartties
Source avec Zip CREATION D'UN FICHIER DBF (EN C) par Stanel
Source avec Zip STRUCTURE DES FICHIERS DBF par Stanel
Source avec Zip Source avec une capture GESTION DES ENTREES/ SORTIES AVEC CODEBARRE par YvaddavY
Source avec Zip Source avec une capture QT4 ET MYSQL par lemda

Commentaires et avis

Commentaire de payen le 10/06/2003 23:13:57

tain', t'est gonfle GazGaz!!! je viens de tout te filer, tout le code, et tu me mets meme pas les remerciements?!? pas cool ...

Commentaire de payen le 10/06/2003 23:16:04

merde, j'avais pas tout lu ... MEA CULPA ... et encore desole GazGaz

Commentaire de revinc le 11/06/2003 08:37:00

c vrai que ça peut être utile mais question rapidité c pas le top...
enfin, on peut pas tout avoir

Commentaire de JCDjcd le 11/06/2003 09:05:18

Tu as declarer les variables 'i' et 'j' dans le main.
Tu les redeclares dans les boucles 'for' ???

C'est bien de tester si l'allocation memoire marche.
Le jour ou 'malloc' retournera 'NULL' tu affiches
a l'ecran un message, mais apres il ne faut pas continuer !

Ton 'main' est prototyper comme retournant un 'int',
Donc a la fin du 'main' tu pourrait faire 'return 0;'

Chez moi quand je rentre '5' puis '6', ca plante !!!
(a la ligne 'tableau[i][j]=1;' )

Commentaire de JCDjcd le 11/06/2003 09:15:52

J'ai trouver ton BUG :
dans tes boucles 'for' imbriquees, tu fait 'tableau[i][j]=1;' !!!!!!
He bien il faut plutot faire 'tableau[j][i]=1;' !!!!!

Il faut changer 'i' avec 'j', en C c'est comme ca !!!!!
Maintenant ca marche du tonnerre !!!!

En C, si on ecrit 'tableau[a][b]', c'est 'a' qui choisi dans quel tableau on va se mettre, le 'b' dans sur quel entier on va se mettre (dans le tableau choisi par 'a)

Commentaire de GazGaz le 11/06/2003 11:06:49

"Chez moi quand je rentre '5' puis '6', ca plante !!!"

moi ca troune nikel j'ai meme essayer avec des grandes valeurs et ca tourne super.

donc desolé pour ton bugg mais chez moi ca va super donc je change po.

et vi zavez raison pour les doubles declarations de compteur mais spo grave c juste une ligne a supprimer

thx all pour les commentaires

Commentaire de JCDjcd le 11/06/2003 11:13:30

Est ce que ca marche aussi quand tu echange 'i' avec 'j' ????

Commentaire de JCDjcd le 11/06/2003 16:46:36

Verifie ta logique !!!!!!!!!
c'est bien '[j][i]' !!!!!!!!!

si chez toi ca marche, c'est un coup de chance !
avec '[j][i]' ca marchera chez tout le monde !!!! (meme chez moi !)

si tu fait [a][b] :
a -&gt; balaye les pointeurs -&gt; 0-nbl
b -&gt; balaye les valeurs    -&gt; 0-nbc

DONC C'EST BIEN '[j][i]' !

En fait du ecrase de la memoire que tu n'as meme pas allouer !

Commentaire de tinenico le 07/01/2004 16:02:56

Chez moi c pareil!!!

IL faut absolument remplacer "[i][j]" par "[j][i]", et LA ca gazgaz!!!

Commentaire de broks le 23/05/2004 15:29:08

il faudrait rajouter une partie pour desallouer la mémoire car ce nest pas si simple.....

Commentaire de broks le 23/05/2004 15:37:29

il faudrait rajouter une partie pour desallouer la mémoire car ce nest pas si simple.....
D'ailleurs j ai les meme blèmes ke les autres, inversion des index et donc sa plante car tu vas dans des espaces memoire non alloués

Commentaire de payen le 23/05/2004 15:46:15

Ca c'est clair, il manque la partie de desallocation. cela dit, c'est assez simple. Il faut rajouter ca :

for (i=0;i&lt;nbl;i++)
     free(tableau[i]);
free(tableau);

En ce qui concerne les index sur le tableau, c'est une simple inversion dans les boucles for : i doit varier de 0 a nbl et j de 0 a nbc, et non l'inverse comme c'est actuellement le cas dans le code ...
Ca devrait etre plus propre comme ca.

Commentaire de trizolakai le 27/08/2005 13:09:20

c'est quand même plus simple en C++

tableau = new unsigned int*;
for(int i = 0; i < taille_x; ++i)
tableau[i] = new unsigned int[taille_y];

mais cette exemple ma servis merci ;)

Commentaire de dark_naruto25 le 29/09/2006 15:18:49

TRIZOLAKAI > Je suis désolé, mais ton exemple est très étonnant... ton ++i dans ta boucle for fait que tu ne vas pas allouer la case 0 de ton tableau.
Je me trompe peut être, dans ce gars je ne dirai plus rien, mais en C++ c'est parail qu'en C, sauf si on fait des erreurs comme toi.
Ciao

Commentaire de CherryBlondy le 03/02/2009 10:17:28

Bonjour !

J'aurais aimé savoir si quelqu'un pouvait mettre un exemple d'allocation dynamique d'un tableau à deux dimensions dans un sous programme.

d'avance merci =)

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales