KioskeaKioskeaCommentCaMarcheInscrivez-vous, c'est gratuit !
Lundi 12 mai 2008 - 16:06:13

[C] malloc, realloc

Rechercher : dans
[C] malloc, realloc
par Newbie
 Fil de Discussions
Statut : Non résolu
lundi 22 mai 2006 à 23:06:39
Bonjour,

je voudrais savoir si quelqu'un pouvais m'écrire un exemple pour l'allocation d'un tableau de char **tab de taille n (malloc) ainsi que la manière de procéder à sa réallocation (realloc) si ce tableau est trop petit.

Merci par avance
Répondre à Newbie  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par mamiemando, le mardi 23 mai 2006 à 01:39:27 Fil de Discussions
Je suppose que tu veux stocker un tableau de chaine de caractère. Le problème c'est qu'il faut a priori connaitre le nombre de chaîne que tu vas stocker.

Je rappelle que malloc renvoie l'adresse au début d'une plage qu'il reserve et dont la taille est passé en paramètre. De manière général on écrit pour un tableau de n cases :
plop * p = (plop *)malloc(n*sizeof(plop));

Il suffit de changer dans ton cas plop par char * :
char ** p = (char **)malloc(n*sizeof(char *));

Pour realloc c'est le même principe. Pour plus d'infos je t'invite à taper dans une console :
man malloc
man calloc
man realloc

De manière générale faire un realloc est une mauvise idée, car il vaut mieux allouer directement la place requise (quand elle est connue :p).

Bonne chance
Répondre à mamiemando

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par NoR, le mardi 25 décembre 2007 à 12:35:36 Fil de Discussions
j pense ke là c 1 tableau double dimension donc il faudrais plutôt faire(j'ai supposais que les deux dim sont égal)
char ** p = (char **)malloc(n*n*sizeof(char *));
Répondre à NoR

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par mamiemando, le dimanche 30 décembre 2007 à 19:41:02 Fil de Discussions 
Non si c'est un tableau m * n :
unsigned i,n=5,m=7;
char **tab_2d = (char *)malloc(m*sizeof(char *));
for(i=0;i<m;++i) tab_2d[i] = (char *)malloc(n*sizeof(char));

//...

for(i=0;i<m;++i) free(tab_2d[i]);
free(tab_2d);

Bonne chance
Répondre à mamiemando
Discussions pertinentes trouvées dans le forum
19/02 15h16[C] malloc et sa librairie "standard"Programmation03/07 22h208
08/06 21h51[C] Listes chaînées + mallocProgrammation12/06 08h086
30/08 08h23[C] mallocProgrammation02/09 20h1920
24/10 14h29comment malloc alloue la memoire ?Programmation24/10 15h031
Plus de discussions sur « [C] malloc, realloc » Discussion en cours Discussion fermée Problème résolu
Répondre
Titre du message :
Votre pseudo:
Votre email :
Message: 
  •  
  •  
Options: Recevoir les réponses par mail.
 

Aide