C : cahr *tab --> allocation dynamique

Résolu/Fermé
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 10 mai 2005 à 12:05
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 11 mai 2005 à 21:01
Bonjours,

voilà, aujourd'hui je suis pas top en forme alors g pas trop envis de me casser la tete pdt 15 plombe sur un truc dont je ne me souvient plus, alors je m'en remet à votre expéreince : mon pb est le suivant : je voudrais créer un tableau de char * dynamiquement, pour cela, au fur et à mesure que je met des éléments dans mon tableau, je dois allouer de la place dans celui-ci pour y placer l'élément. Les éléments sont toujours des char * et on connait leur taille, comment fdaire donc ?
Le C pour moi c'est tres loin, alors si des gens peuvent m'aider, merci beaucoup :)

ps : c'est un tableau à deux entrées destiné à mémoriser les resultats de requetes.

moi je mettrais un truc du genre, mais est-ce bon ? :
char *tab = null;
int i = 0;
char *element = "ici";
int taille = 4;

for(i=0;i<4;i++){
 tab[i] = malloc((char *)taille*sizeof(char));
 tab[i] = element;
}


Est-ce que cela est correct. La je vais manger alors j'ai pas tester en fait,
merci.

++

14 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
10 mai 2005 à 16:19
Personne pour répondre ?

Pas même mister Sam3000 ou Luffy ( ou qu'il est d'ailleur ? toujours vivant ? )
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
10 mai 2005 à 18:53
alleluia ! je suis réssucité! Prosternez-vous devant le grand LuFfY =)

nan mais en fait chuis à l'école en ce moment, et en plein dans les révisions, donc plus tropde temps à consacrer au forum...

Mais je voles volontiers à ton secours quand tu es en difficulté kij =)
sauf que là, ben Dieu m'a réssucité trop tard !
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
10 mai 2005 à 16:37
oui, kij_82 !
chui la, je vais voir (combien tu paye l'heure :-) )
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
10 mai 2005 à 16:48
Sais pas... tu m'fais quoi ? :D
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
10 mai 2005 à 16:50
non, c'est pas bon ça! ce que tu fais là c'est allouer des caracteres, alors que tu doit allouer des pointeurs:
#include <stdio.h>
#include <stdlib.h>

void main()
{
int i = 0;
char **tab;
char *element = "ici";
int taille = 4;

tab = (char **) malloc(taille * sizeof(char *));
for(i=0;i<taille;i++)
{
 *(tab+i) = element;
}

for(i=0;i<taille;i++)
{
 printf("%s\n",*(tab+i));
}
free(tab);
}
0
T'as de la chance j'ai failli de foutre un SIGSEGV dans la gl...

Vous croyez pas que l'exercice aurait plus d'intérêt pédagogique si sizeof(element) était différent du nombre d'élément de tab ???
0
T'a déjà un tableau 2D dans cet exo.
La première dimension est le N° de chaine et la deuxième, le N° de caractère.

Si tu parle d'un char *tab[][] (un tableau 3D de caractère, soit 2D de chaînes de caractères), ben... T'alloue d'abors le nombre de colonnes (on considère que c'est la première dimension.)
Ensuite pour chaque colone col, tu alloue le pointeur
tab[col], qui correspond aux vecteurs colonnes de la matrice (chaque colonne est composé de N chaines, N peut varier avec la colonne).
Puis, pour chaque ligne de chaque colonne, il faut encore allouer tab[col][line], chaque chaine de caractère (ou, affecter une chaine récupérée quelque part, à condition d'être sûr que c'est toi qui dois la désallouer).

Pour libérer le tableau, c'est l'inverse : pour chaque ligne de chaque colonne, tu fais un free(tab[col][line]); puis pour chaque colonne un free(tab[col]); et enfin, un free(tab); pour libérer le tableau de colonnes.

Quand je parler de taille différente, l'idée est de mettre 6 chaînes de caractère dans le tableau.

Le problème est la chaîne "ici", qui a, on est d'accord, une taille de 3 carcatères, occupe un espace mémoire de 4 octets.
En effet écrire

char chaine[] = "ici";
est strictement équivalent à
char chaine[] = {'i', 'c', 'i', '\0'};

(Pour le SIGSEGV, c'est quand on déborde de la mémoire...
Un instant j'ai cru que Sam débordait...)
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857 > SKZ
11 mai 2005 à 21:01
merci en fait mon pb est résolu..

++
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 mai 2005 à 11:43
??? peu etre plus clair stp ?

En tout cas, comment ca se passe pour un tableau 2D de char * ?

(je sais je suis une merde en C)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
10 mai 2005 à 17:10
j'te remercie bien pour le coup de pouce.

++
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
10 mai 2005 à 17:18
de rien, laisse moi aider les filles maintenant!
je rigole :), j'aide tous le monde. (j'espere que quelqu'un pourra m'aider quand j'en aurais besoin)
0
de rien, laisse moi aider les filles maintenant!
Kedal tu m'les laisse !!!
:-P

Pour répondre à ta citation (je m'acharne un peu sur ce post, mais en vrai je suis gentil) :
La Shoha n'avait rien d'informatique (et je suis pas juif, pour peuve je sais pas écrire Shoa...)

C'est pas très programmation, je digresse :-/
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 mai 2005 à 10:06
pas grave va !
0
m0n0-le-14r3 Messages postés 174 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 octobre 2005 17
11 mai 2005 à 10:07
tiens bonjour kij...
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 mai 2005 à 10:25
Bonjours,

Sympa ton message, alors cette romance, c'en est ou ? ca cavance ? dommage que tu parte cet été... enfin moi j'dit ca mais j'dit rien... :)
0
m0n0-le-14r3 Messages postés 174 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 octobre 2005 17
11 mai 2005 à 10:44
mais non ca n'avance pas ... tu n'as donc pas compris.... ct juste comme ça...just for fun !!
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 mai 2005 à 10:59
elle a pas de copain à mon avis...
0
m0n0-le-14r3 Messages postés 174 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 octobre 2005 17
11 mai 2005 à 11:03
en effet... mais plein d'amant ;)
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857 > m0n0-le-14r3 Messages postés 174 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 octobre 2005
11 mai 2005 à 11:08
ah ouai... (tiens tiens, fort intéressant ca... :D ) Non je palisante, je suis un homme différent maintenant !! j'ai changé.. j'ai pris plein de résolution suite à cette année et certain dérapage lors de fete trop arrosée (comme une soirée à la salle des fetes par exemple...)

je suis plein de bonnes intention maintenant !
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
11 mai 2005 à 11:31
waw, j'apprend tous les jours avec kij :)
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 mai 2005 à 11:36
?? Tu es pas le Sam que je connais toi ?! Attention pas de blague..
0
m0n0-le-14r3 Messages postés 174 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 octobre 2005 17
11 mai 2005 à 11:46
si tu regardes son profil, je ne pense pas...
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 mai 2005 à 11:56
T'a vu le mien !! Ya rien de juste dedans ! Mise à par deux trois truc peut etre...
0
m0n0-le-14r3 Messages postés 174 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 octobre 2005 17
11 mai 2005 à 11:59
la photo par exemple est tres ressemblente !!! :P
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
11 mai 2005 à 12:03
Question à Sam3000 :

Comment ca se passe pour un tableau 2D de char * ?

Je pensais faire un typedef TRUC char *t[2];
Puis faire un pointeur qui se déplace dessus à ta facon,
c'est correct ?
0