Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1687 connectés 

  FORUM HardWare.fr
  Programmation

  [C] Un petit pb de realloc et de malloc :

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Un petit pb de realloc et de malloc :

n°91663
thadawg
Putting knowledge into heads
Posté le 21-01-2002 à 19:03:52  profilanswer
 

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.
mood
Publicité
Posté le 21-01-2002 à 19:03:52  profilanswer
 

n°91666
deathsharp
Posté le 21-01-2002 à 19:06:23  profilanswer
 

deja je remarque qu'il y a un risque de confusion dans creer_tableau avec la variable Tab


---------------
What butter and whiskey won't cure, there is no cure for.
n°91668
thadawg
Putting knowledge into heads
Posté le 21-01-2002 à 19:10:41  profilanswer
 

Merci de ta réponse :)  
 
J'ai tout changé mais ca ne vient pas de là :(


---------------
Wigga with Attitude.
n°91673
LeGreg
Posté le 21-01-2002 à 19:14:16  profilanswer
 

Code :
  1. int ** creer_tableau(int ** Tab , int Lignes , int Colonnes)
  2. {
  3. Tab = realloc( Tab , Lignes * sizeof(int *));
  4. Tab[Lignes - 1] = malloc(Colonnes * sizeof(int));
  5. }


 
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

n°91675
thadawg
Putting knowledge into heads
Posté le 21-01-2002 à 19:23:08  profilanswer
 

Rien n'y fait  
 
Merci qd meme LEGREG


---------------
Wigga with Attitude.
n°91689
Krueger
tout salaire demande dutravail
Posté le 21-01-2002 à 20:26:11  profilanswer
 

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. :D

 

[edtdd]--Message édité par Krueger--[/edtdd]


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°91697
thadawg
Putting knowledge into heads
Posté le 21-01-2002 à 20:54:30  profilanswer
 

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]


---------------
Wigga with Attitude.
n°91700
LeGreg
Posté le 21-01-2002 à 21:01:45  profilanswer
 

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 :
  1. int i;
  2. int **tab = malloc(sizeof(int*)*4);
  3. for (i=0; i<3; ++i) {
  4.   tab[i] = malloc(sizeof(int)*3);
  5. }


et il faut le liberer avant de le reallouer:

Code :
  1. for (i=0; i<3; ++i) {
  2.   free tab[i];
  3. };
  4. free tab;


LEGREG

 

[edtdd]--Message édité par legreg--[/edtdd]

n°91711
thadawg
Putting knowledge into heads
Posté le 21-01-2002 à 21:16:44  profilanswer
 

legreg a écrit a écrit :

 

Code :
  1. int i;
  2. int **tab = malloc(sizeof(int*)*4);
  3. for (i=0; i<3; ++i) {
  4.   tab[i] = malloc(sizeof(int)*3);
  5. }


et il faut le liberer avant de le reallouer:

Code :
  1. for (i=0; i<3; ++i) {
  2.   free tab[i];
  3. };
  4. free tab;


LEGREG  
 
 




 
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]


---------------
Wigga with Attitude.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C] Un petit pb de realloc et de malloc :

 

Sujets relatifs
petit probleme hyper facile pour VB pour mon premier tp de fac[PHP] moteur de recherche (tout petit :D)
Petit problème sous DEV C++petit prob lors d'install sous win 98 1ere edition
recherche petit bouquin sympaUn petit peu de VB
petit prob en cFaire un petit prog : une histoire de ping et de délais dépassés
[DHTML] [JAVA] Petit probleme Netscape - IE 
Plus de sujets relatifs à : [C] Un petit pb de realloc et de malloc :


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR