Mais, son ex=E9cution ne se passe pas bien. Le d=E9bogage indique que
l'erreur est au niveau de lib=E9ration de la m=E9moire.
De plus, lorsque j'ai enlev=E9 le code suivant qui pr=E9sente la
lib=E9ration de l'espace de la m=E9moire utilis=E9:
if(t)
{
for (i =3D 0; i < N; i++)
free(t[i]);
free(t);
}
for (i =3D 0; i < nbre; i++)
{
while (rets && rets[i])
free(rets[i]);
Wow ! Un pointeur sur un pointeur sur un pointeur ?
Il ne manquerait pas encore une étoile, histoire d'avoir un pointeur sur tout ça ? Ou bien c'est le délai de répétition de votre clavier qui est mal réglé ?
Wow ! Un pointeur sur un pointeur sur un pointeur ?
Il ne manquerait pas encore une étoile, histoire d'avoir un pointeur sur
tout ça ? Ou bien c'est le délai de répétition de votre clavier qui est
mal réglé ?
Wow ! Un pointeur sur un pointeur sur un pointeur ?
Il ne manquerait pas encore une étoile, histoire d'avoir un pointeur sur tout ça ? Ou bien c'est le délai de répétition de votre clavier qui est mal réglé ?
marc
On 5 nov, 00:39, programmation wrote:
Dans mon programme C, j'ai alloué de la mémoire dynamiquement.
De lire le K&R, comme on t'a je crois déjà recommandé, car tu ne sembles pas savoir ce qu'est un pointeur et son utilité. Ce qui est légèrement bloquant en C.
On 5 nov, 00:39, programmation <bouali.a...@gmail.com> wrote:
Dans mon programme C, j'ai alloué de la mémoire dynamiquement.
De lire le K&R, comme on t'a je crois déjà recommandé, car tu ne
sembles pas savoir ce qu'est un pointeur et son utilité.
Ce qui est légèrement bloquant en C.
De lire le K&R, comme on t'a je crois déjà recommandé, car tu ne sembles pas savoir ce qu'est un pointeur et son utilité. Ce qui est légèrement bloquant en C.
Vincent Burel
"programmation" wrote in message news:
Dans mon programme C, j'ai alloué de la mémoire dynamiquement. char ***rets = NULL, **interret = NULL, **t = NULL;
évitez des évaluations qui modifier un argument genre (++interret_size) dans un appel de fonction.
for (i = 0; i < N; i++)
free(t[i]); free(t); }
Vous libérez des pointeurs qui sont dans un tableau , mais vous libérez aussi le tableau en question à chaque tour. La logique voudrais qu'on ait plutot :
for (i = 0; i < N; i++) { free(t[i]); } free(t);
Que proposez vous ?
Ben , de faire du code plus explicite déjà !
VB
"programmation" <bouali.asma@gmail.com> wrote in message
news:f662a835-41de-4331-8ad9-588edb21dbda@c3g2000yqd.googlegroups.com...
Dans mon programme C, j'ai alloué de la mémoire dynamiquement.
char ***rets = NULL, **interret = NULL, **t = NULL;
évitez des évaluations qui modifier un argument genre (++interret_size) dans
un appel de fonction.
for (i = 0; i < N; i++)
free(t[i]);
free(t);
}
Vous libérez des pointeurs qui sont dans un tableau , mais vous libérez
aussi le tableau en question à chaque tour.
La logique voudrais qu'on ait plutot :
évitez des évaluations qui modifier un argument genre (++interret_size) dans un appel de fonction.
for (i = 0; i < N; i++)
free(t[i]); free(t); }
Vous libérez des pointeurs qui sont dans un tableau , mais vous libérez aussi le tableau en question à chaque tour. La logique voudrais qu'on ait plutot :
for (i = 0; i < N; i++) { free(t[i]); } free(t);
Que proposez vous ?
Ben , de faire du code plus explicite déjà !
VB
programmation
Bonjour, Je voulais allouer un tableau t des chaines de caractères de taille N. J'ai fait: [code] char **t = NULL; t = (char **) malloc(N * sizeof(*t));[/code]
Puis, je passe ce tableau comme paramètre à une fonction 'comb_att()' pour le remplir comme le suivant: [code] comb_att(t,N); [/code]
Ensuite, j'affiche ce tableau t comme suit: [code] for(v=0;v<N;v++) printf(":::: %sn",t[v]); [/code] et pour la libération de tableau t, je fais comme suit: [code]if(t) { for (i = 0; i < N; i++) free(t[i]); free(t); }[/code]
et dans le code de la fonction 'comb_att()' voici comment j'ai déclaré t:
Lorsque je lance l'exécution alors elle s'arrête juste après l'appel de la fonction 'comb_att()' et donc je n'obtiens pas l'affichage de tableau t.
voici la fonction 'comb_att()' : [code]int comb_att(char **t,int N) { ........... .....................
//lire un fichier //chaque ligne contient trois champs //pour chaque ligne de fichier mettre le premier et le deuxième champ dans une case de tableau t
fp=fopen("in.txt","r"); if (fp == NULL) { printf("impossible d'ouvrier le fichiern"); exit(0); }
for(i=0; i < N;i++) { fgets(s, 100, fp); sscanf(s,"%s%s%S",attribut1,attribut2,attribut3);
- Est ce que on a besoin de mettre comme valeur de retour pour la fonction 'comb_att' ?
- C'est juste la partie suivante ? [code] strcat(t[i],attribut1); strcat(t[i]," "); strcat(t[i]," attribut2") [/code] Je voulais chaque case de tableau t contient le deux premiers champ de fichier. ces deux champs sont séparés par un espace
- Quelle est la différence si on met t[i] ou *t[i] dans la fonction 'strcat()' ?
Merci.
Bonjour,
Je voulais allouer un tableau t des chaines de caractères de taille N.
J'ai fait:
[code]
char **t = NULL;
t = (char **) malloc(N * sizeof(*t));[/code]
Puis, je passe ce tableau comme paramètre à une fonction 'comb_att()'
pour le remplir comme le suivant:
[code]
comb_att(t,N); [/code]
Ensuite, j'affiche ce tableau t comme suit:
[code]
for(v=0;v<N;v++)
printf(":::: %sn",t[v]);
[/code]
et pour la libération de tableau t, je fais comme suit:
[code]if(t)
{
for (i = 0; i < N; i++)
free(t[i]);
free(t);
}[/code]
et dans le code de la fonction 'comb_att()' voici comment j'ai déclaré
t:
Lorsque je lance l'exécution alors elle s'arrête juste après l'appel
de la fonction 'comb_att()' et donc je n'obtiens pas l'affichage de
tableau t.
voici la fonction 'comb_att()' :
[code]int comb_att(char **t,int N)
{
...........
.....................
//lire un fichier
//chaque ligne contient trois champs
//pour chaque ligne de fichier mettre le premier et le deuxième champ
dans une case de tableau t
fp=fopen("in.txt","r");
if (fp == NULL)
{
printf("impossible d'ouvrier le fichiern");
exit(0);
}
for(i=0; i < N;i++)
{
fgets(s, 100, fp);
sscanf(s,"%s%s%S",attribut1,attribut2,attribut3);
- Est ce que on a besoin de mettre comme valeur de retour pour la
fonction 'comb_att' ?
- C'est juste la partie suivante ?
[code] strcat(t[i],attribut1);
strcat(t[i]," ");
strcat(t[i]," attribut2")
[/code]
Je voulais chaque case de tableau t contient le deux premiers champ de
fichier. ces deux champs sont séparés par un espace
- Quelle est la différence si on met t[i] ou *t[i] dans la fonction
'strcat()' ?
Bonjour, Je voulais allouer un tableau t des chaines de caractères de taille N. J'ai fait: [code] char **t = NULL; t = (char **) malloc(N * sizeof(*t));[/code]
Puis, je passe ce tableau comme paramètre à une fonction 'comb_att()' pour le remplir comme le suivant: [code] comb_att(t,N); [/code]
Ensuite, j'affiche ce tableau t comme suit: [code] for(v=0;v<N;v++) printf(":::: %sn",t[v]); [/code] et pour la libération de tableau t, je fais comme suit: [code]if(t) { for (i = 0; i < N; i++) free(t[i]); free(t); }[/code]
et dans le code de la fonction 'comb_att()' voici comment j'ai déclaré t:
Lorsque je lance l'exécution alors elle s'arrête juste après l'appel de la fonction 'comb_att()' et donc je n'obtiens pas l'affichage de tableau t.
voici la fonction 'comb_att()' : [code]int comb_att(char **t,int N) { ........... .....................
//lire un fichier //chaque ligne contient trois champs //pour chaque ligne de fichier mettre le premier et le deuxième champ dans une case de tableau t
fp=fopen("in.txt","r"); if (fp == NULL) { printf("impossible d'ouvrier le fichiern"); exit(0); }
for(i=0; i < N;i++) { fgets(s, 100, fp); sscanf(s,"%s%s%S",attribut1,attribut2,attribut3);
- Est ce que on a besoin de mettre comme valeur de retour pour la fonction 'comb_att' ?
- C'est juste la partie suivante ? [code] strcat(t[i],attribut1); strcat(t[i]," "); strcat(t[i]," attribut2") [/code] Je voulais chaque case de tableau t contient le deux premiers champ de fichier. ces deux champs sont séparés par un espace
- Quelle est la différence si on met t[i] ou *t[i] dans la fonction 'strcat()' ?
Merci.
Thierry
"programmation" wrote in message news: Bonjour, Je voulais allouer un tableau t des chaines de caractères de taille N. J'ai fait: [code]
Puis, je passe ce tableau comme paramètre à une fonction 'comb_att()'
Stop ! Tu alloues le tableau mais pas les elements de ce tableau. for (int loop = 0; loop < N; loop++) t[i] = (char *) malloc(taille_maxi_de_chaine);
Un conseil (de base): utilises des noms de variables plus explicites.
"programmation" <bouali.asma@gmail.com> wrote in message
news:a49bc3b9-493f-4d76-965d-e3c3a9d5ae24@g23g2000yqh.googlegroups.com...
Bonjour,
Je voulais allouer un tableau t des chaines de caractères de taille N.
J'ai fait:
[code]
//affichage de résultat: for(i=0;i<N;i++) printf("%sn",tab[i];
return 0; }
Je crois que ces allocations ne sont pas justes car je voulais créer un tableau de taille M avec M est le nombre de combinaisons possible formé par N mots. par exemple Si on a 4 mots c'est à dire N=4 Donc, M car on a: - 6 combinaisons possibles formé par 2 mots. - 4 combinaisons possibles formé par 3 mots. - 1 combinaison formée par 1 mot
Je ne précise pas dans l'allocation la taille maximale car je ne sais pas en avance cette taille. Est ce que c'est nécessaire de la fixer ?
Chaque case de tableau contient une combinaison possible donc on a M cases et la taille de case est variante puisque elle dépend de nombre de mots formant de chaque combinaison.
Que proposez vous ?
J'ai autre demande: On a un fichier texte 'f.txt' qui contient dans chaque ligne une chaine de caractère. Je voulais charger ce fichier dans un tableau T. Mais je ne sais pas combien la taille de tableau à allouer . Si on fait comme çà: T = (char **) malloc(n * sizeof(*T));
for (i = 0; i < n; i++) T[i] = (char *) malloc(sizeof(T));
Avec n est la taille de tableau (nombre des cases). C'est juste ? Combien est la taille maximale de chaine de caractères ?
Dans la deuxième allocation on ne précise pas la taille maximale de chaine caractère (non connu) allouée par chaque case de tableau T ?
Merci.
> Tu alloues le tableau mais pas les elements de ce tableau.
for (int loop = 0; loop < N; loop++)
t[i] = (char *) malloc(taille_maxi_de_chaine);
Un conseil (de base): utilises des noms de variables plus explicites.
Voici les allocations que j'ai fait:
Code :
int main()
{
char **tab=NULL;
int N,cp,i;
tab = (char **) malloc(N * sizeof(*tab));
//affichage de résultat:
for(i=0;i<N;i++)
printf("%sn",tab[i];
return 0;
}
Je crois que ces allocations ne sont pas justes car je voulais créer
un tableau de taille M avec M est le nombre de combinaisons possible
formé par N mots.
par exemple Si on a 4 mots c'est à dire N=4
Donc, M =11
car on a:
- 6 combinaisons possibles formé par 2 mots.
- 4 combinaisons possibles formé par 3 mots.
- 1 combinaison formée par 1 mot
Je ne précise pas dans l'allocation la taille maximale car je ne sais
pas en avance cette taille.
Est ce que c'est nécessaire de la fixer ?
Chaque case de tableau contient une combinaison possible donc on a M
cases et la taille de case est variante puisque elle dépend de nombre
de mots formant de chaque combinaison.
Que proposez vous ?
J'ai autre demande:
On a un fichier texte 'f.txt' qui contient dans chaque ligne une
chaine de caractère.
Je voulais charger ce fichier dans un tableau T.
Mais je ne sais pas combien la taille de tableau à allouer .
Si on fait comme çà:
T = (char **) malloc(n * sizeof(*T));
for (i = 0; i < n; i++)
T[i] = (char *) malloc(sizeof(T));
Avec n est la taille de tableau (nombre des cases).
C'est juste ? Combien est la taille maximale de chaine de caractères ?
Dans la deuxième allocation on ne précise pas la taille maximale de
chaine caractère (non connu) allouée par chaque case de tableau T ?
//affichage de résultat: for(i=0;i<N;i++) printf("%sn",tab[i];
return 0; }
Je crois que ces allocations ne sont pas justes car je voulais créer un tableau de taille M avec M est le nombre de combinaisons possible formé par N mots. par exemple Si on a 4 mots c'est à dire N=4 Donc, M car on a: - 6 combinaisons possibles formé par 2 mots. - 4 combinaisons possibles formé par 3 mots. - 1 combinaison formée par 1 mot
Je ne précise pas dans l'allocation la taille maximale car je ne sais pas en avance cette taille. Est ce que c'est nécessaire de la fixer ?
Chaque case de tableau contient une combinaison possible donc on a M cases et la taille de case est variante puisque elle dépend de nombre de mots formant de chaque combinaison.
Que proposez vous ?
J'ai autre demande: On a un fichier texte 'f.txt' qui contient dans chaque ligne une chaine de caractère. Je voulais charger ce fichier dans un tableau T. Mais je ne sais pas combien la taille de tableau à allouer . Si on fait comme çà: T = (char **) malloc(n * sizeof(*T));
for (i = 0; i < n; i++) T[i] = (char *) malloc(sizeof(T));
Avec n est la taille de tableau (nombre des cases). C'est juste ? Combien est la taille maximale de chaine de caractères ?
Dans la deuxième allocation on ne précise pas la taille maximale de chaine caractère (non connu) allouée par chaque case de tableau T ?
Merci.
Thierry
"programmation" wrote in message news:
int main() { char **tab=NULL; int N,cp,i; tab = (char **) malloc(N * sizeof(*tab));
Je ne précise pas dans l'allocation la taille maximale car je ne sais pas en avance cette taille. Est ce que c'est nécessaire de la fixer ?
Oui !
Chaque case de tableau contient une combinaison possible donc on a M cases et la taille de case est variante puisque elle dépend de nombre de mots formant de chaque combinaison.
Je voulais charger ce fichier dans un tableau T. Mais je ne sais pas combien la taille de tableau à allouer . Si on fait comme çà: T = (char **) malloc(n * sizeof(*T));
for (i = 0; i < n; i++) T[i] = (char *) malloc(sizeof(T));
Taille pas bonne.
Serieusement, il faut lire le K&R.
"programmation" <bouali.asma@gmail.com> wrote in message
news:d449ec7b-6b69-4898-9220-d39892b928fd@d10g2000yqh.googlegroups.com...
int main()
{
char **tab=NULL;
int N,cp,i;
tab = (char **) malloc(N * sizeof(*tab));
Je ne précise pas dans l'allocation la taille maximale car je ne sais
pas en avance cette taille.
Est ce que c'est nécessaire de la fixer ?
Oui !
Chaque case de tableau contient une combinaison possible donc on a M
cases et la taille de case est variante puisque elle dépend de nombre
de mots formant de chaque combinaison.
Je voulais charger ce fichier dans un tableau T.
Mais je ne sais pas combien la taille de tableau à allouer .
Si on fait comme çà:
T = (char **) malloc(n * sizeof(*T));
for (i = 0; i < n; i++)
T[i] = (char *) malloc(sizeof(T));
Je ne précise pas dans l'allocation la taille maximale car je ne sais pas en avance cette taille. Est ce que c'est nécessaire de la fixer ?
Oui !
Chaque case de tableau contient une combinaison possible donc on a M cases et la taille de case est variante puisque elle dépend de nombre de mots formant de chaque combinaison.
Je voulais charger ce fichier dans un tableau T. Mais je ne sais pas combien la taille de tableau à allouer . Si on fait comme çà: T = (char **) malloc(n * sizeof(*T));
for (i = 0; i < n; i++) T[i] = (char *) malloc(sizeof(T));