Un petit pb de realloc et de malloc : [C] - Programmation
Marsh Posté le 21-01-2002 à 19:06:23
deja je remarque qu'il y a un risque de confusion dans creer_tableau avec la variable Tab
Marsh Posté le 21-01-2002 à 19:10:41
Merci de ta réponse
J'ai tout changé mais ca ne vient pas de là
Marsh Posté le 21-01-2002 à 19:14:16
Code :
|
Quelle est ta valeur de retour?
=> ton tableau est bien alloue
mais la valeur n'est jamais retournee.
Je propose que tu fasses un return Tab;
a la fin de ta fonction.
LEGREG
Marsh Posté le 21-01-2002 à 19:23:08
Rien n'y fait
Merci qd meme LEGREG
Marsh Posté le 21-01-2002 à 20:26:11
Pourquoi un realloc? Car vu ton programme tu n'en as pas du tout besoin.
As-tu essayé de caster les retours de malloc/realloc?
Pourquoi n'alloues-tu pas le reste de ton tableau par une boucle pour un code plus propre (tu ne peux utiliser que la dernière ligne de ton tableau), bien que ça ne devrait pas poser de problèmes dans ton cas ici?
Voilà j'arrête pour les questions.
[edtdd]--Message édité par Krueger--[/edtdd]
Marsh Posté le 21-01-2002 à 20:54:30
Krueger a écrit a écrit : Pourquoi un realloc? Car vu ton programme tu n'en as pas du tout besoin. As-tu essayé de caster les retours de malloc/realloc? Pourquoi n'alloues-tu pas le reste de ton tableau par une boucle pour un code plus propre (tu ne peux utiliser que la dernière ligne de ton tableau), bien que ça ne devrait pas poser de problèmes dans ton cas ici? |
Cet algo fait partie integrante d'un autre plus complexe . Ceci dit, j'ai dû isoler, par souci de clarté la partie qui ne fonctionnait pas . Comme j'ai besoin d'un tableau dynamique sur une seule dimansion, je ne peux me passer des realloc et malloc .
[edtdd]--Message édité par thadawg--[/edtdd]
Marsh Posté le 21-01-2002 à 21:01:45
thadawg a écrit a écrit : Tab = realloc( Tab , Lignes * sizeof(int *)); Tab[Lignes - 1] = malloc(Colonnes * sizeof(int)); |
il ne faut utiliser le realloc
que sur un tableau deja initialise
par malloc ou relloc.
par ailleurs le realloc ne fait pas vraiment ce
que tu veux. l'idee c'est d'avoir un nouveau bloc
de memoire avec les memes donnees (au moins dans les
premiers elements).
De plus ton malloc n'alloue que ta derniere ligne..
(et comment tu fais quand il y a plus qu'une ligne??)
bref ton programme ne fait pas grand chose de bon a l'heure actuelle.
exemple de code qui initialise un tableau de tableau
a 4 * 3 elements:
Code :
|
et il faut le liberer avant de le reallouer:
Code :
|
LEGREG
[edtdd]--Message édité par legreg--[/edtdd]
Marsh Posté le 21-01-2002 à 21:16:44
legreg a écrit a écrit :
|
merci de ton aide et de ta patience legreg .
En fait, je n'ai pas au depart connaissance de la taille finale de mon tableau, du moins, je ne connais que le nombre de colonnes : 4 .
Je veux que, apres manipulation de chaine de caracteres, je puisse commander l'ajout d'une ligne a ce tableau. Chose que je comtais faire par : "creer_tableau (tableau, Lignes++, 4)"
[edtdd]--Message édité par thadawg--[/edtdd]
Marsh Posté le 21-01-2002 à 19:03:52
Actuellement, j'ai :
-------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ** Tab;
int ** creer_tableau(int ** Tab , int Lignes , int Colonnes)
{
Tab = realloc( Tab , Lignes * sizeof(int *));
Tab[Lignes - 1] = malloc(Colonnes * sizeof(int));
}
main ()
{
int i = 0;
creer_tableau(Tab, 1 , 3); // créé en théorie un tableau 1 ligne , 3 colonnes
//init
for ( i=1 ; i < 3 ; i++ )
{
Tab[0][i] = 0;
}
//fin init
printf("%d/n", Tab[0][2]);
}
-------------------
Apparemment, je n'arrive pas à initialiser tout cela, quelqu'un aurait-il une idée ?
---------------
Wigga with Attitude.