ALLOCATION DYNAMIQUE DE MEMOIRE D'UN TABLEAU À 2 DIMENSIONS

cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005 - 10 juin 2003 à 23:13
CherryBlondy Messages postés 16 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 3 mars 2009 - 3 févr. 2009 à 10:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10891-allocation-dynamique-de-memoire-d-un-tableau-a-2-dimensions

CherryBlondy Messages postés 16 Date d'inscription samedi 6 décembre 2008 Statut Membre Dernière intervention 3 mars 2009
3 févr. 2009 à 10:17
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 =)
dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
29 sept. 2006 à 15:18
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
trizolakai Messages postés 3 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 27 août 2005
27 août 2005 à 13:09
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 ;)
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
23 mai 2004 à 15:46
Ca c'est clair, il manque la partie de desallocation. cela dit, c'est assez simple. Il faut rajouter ca :

for (i=0;i<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.
broks Messages postés 9 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 12 mai 2004
23 mai 2004 à 15:37
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
broks Messages postés 9 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 12 mai 2004
23 mai 2004 à 15:29
il faudrait rajouter une partie pour desallouer la mémoire car ce nest pas si simple.....
tinenico Messages postés 1 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 7 janvier 2004
7 janv. 2004 à 16:02
Chez moi c pareil!!!

IL faut absolument remplacer "[i][j]" par "[j][i]", et LA ca gazgaz!!!
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
11 juin 2003 à 16:46
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 -> balaye les pointeurs -> 0-nbl
b -> balaye les valeurs -> 0-nbc

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

En fait du ecrase de la memoire que tu n'as meme pas allouer !
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
11 juin 2003 à 11:13
Est ce que ca marche aussi quand tu echange 'i' avec 'j' ????
cs_GazGaz Messages postés 31 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 14 juin 2003
11 juin 2003 à 11:06
"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
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
11 juin 2003 à 09:15
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)
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
11 juin 2003 à 09:05
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;' )
revinc Messages postés 385 Date d'inscription mardi 15 octobre 2002 Statut Membre Dernière intervention 19 décembre 2017
11 juin 2003 à 08:37
c vrai que ça peut être utile mais question rapidité c pas le top...
enfin, on peut pas tout avoir
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
10 juin 2003 à 23:16
merde, j'avais pas tout lu ... MEA CULPA ... et encore desole GazGaz
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
10 juin 2003 à 23:13
tain', t'est gonfle GazGaz!!! je viens de tout te filer, tout le code, et tu me mets meme pas les remerciements?!? pas cool ...
Rejoignez-nous