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

 


Dernière réponse
Sujet : [C] Un petit pb de realloc et de malloc :
thadawg

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]


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
thadawg

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]

LeGreg

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]

thadawg

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]

Krueger 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]

thadawg Rien n'y fait  
 
Merci qd meme LEGREG
LeGreg

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

thadawg Merci de ta réponse :)  
 
J'ai tout changé mais ca ne vient pas de là :(
deathsharp deja je remarque qu'il y a un risque de confusion dans creer_tableau avec la variable Tab
thadawg 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 ?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)