ALLOCATION DYNAMIQUE DE MEMOIRE D'UN TABLEAU À 2 DIMENSIONS
cs_payen
Messages postés252Date d'inscriptionmercredi 25 octobre 2000StatutMembreDernière intervention 1 mai 2005
-
10 juin 2003 à 23:13
CherryBlondy
Messages postés16Date d'inscriptionsamedi 6 décembre 2008StatutMembreDerniè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.
CherryBlondy
Messages postés16Date d'inscriptionsamedi 6 décembre 2008StatutMembreDerniè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és127Date d'inscriptionmardi 23 août 2005StatutMembreDerniè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és3Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention27 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és252Date d'inscriptionmercredi 25 octobre 2000StatutMembreDerniè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és9Date d'inscriptionmardi 16 mars 2004StatutMembreDernière intervention12 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és9Date d'inscriptionmardi 16 mars 2004StatutMembreDernière intervention12 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és1Date d'inscriptionlundi 24 novembre 2003StatutMembreDerniè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és1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 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és1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 11 juin 2003 à 11:13
Est ce que ca marche aussi quand tu echange 'i' avec 'j' ????
cs_GazGaz
Messages postés31Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention14 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és1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 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és1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 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és385Date d'inscriptionmardi 15 octobre 2002StatutMembreDernière intervention19 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és252Date d'inscriptionmercredi 25 octobre 2000StatutMembreDerniè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és252Date d'inscriptionmercredi 25 octobre 2000StatutMembreDerniè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 ...
3 févr. 2009 à 10:17
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 =)
29 sept. 2006 à 15:18
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
27 août 2005 à 13:09
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 ;)
23 mai 2004 à 15:46
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.
23 mai 2004 à 15:37
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
23 mai 2004 à 15:29
7 janv. 2004 à 16:02
IL faut absolument remplacer "[i][j]" par "[j][i]", et LA ca gazgaz!!!
11 juin 2003 à 16:46
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 !
11 juin 2003 à 11:13
11 juin 2003 à 11:06
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
11 juin 2003 à 09:15
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)
11 juin 2003 à 09:05
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;' )
11 juin 2003 à 08:37
enfin, on peut pas tout avoir
10 juin 2003 à 23:16
10 juin 2003 à 23:13