[C] TD5 - EX14

Page 2 sur 2 Précédent  1, 2

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu Re: [C] TD5 - EX14

Message  nvs le Mar 09 Nov 2010, 23:15

Dj x-fuse a écrit:A ce stade, j'y comprends plus rien...
je sais que je me répète, mais que fais-tu à la ligne 7 ? tabMorceaux est censé être quoi ? la taille te semble ok ? pourquoi calloc et plus malloc ? le premier paramètre de calloc à zéro : n'est-ce pas un peu osé ?






tongue

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

resolu Re: [C] TD5 - EX14

Message  Dj x-fuse le Mer 10 Nov 2010, 01:11

nvs a écrit:je sais que je me répète, mais que fais-tu à la ligne 7 ? tabMorceaux est censé être quoi ? la taille te semble ok ? pourquoi calloc et plus malloc ? le premier paramètre de calloc à zéro : n'est-ce pas un peu osé ?
A cette fameuse ligne 7, je me disais que je ferais une chaine de pointeur de caractère, sauf qu'après réflexion, ce n'est pas du tout la bonne idée. Autant allouer directement la bonne valeur afin de faire une seule chaine de caractères. Bien entendu, la déclaration est totalement foireuse.

tabMorceaux correspond à l'idée perçue de "la ligne 7" (une chaine de pointeurs). Ainsi, je n'aurais plus qu'à "coller" les différentes valeurs des pointeurs de cette chaine et j'obtiendrais mon texte.

La taille me semble correcte, à savoir autant de "cases" qu'il y a de morceaux différents du texte. Ces cases pointes chacunes vers une chaine de caractère (un "morceau").

J'utilise maintenant calloc car cela me permet d'être certain qu'à l'allocation j'écrase les valeurs précédentes qui se trouvaient à cet endroit.

Je viens de relire la doc pour les paramètres de calloc, rien n'y fait, j'ai toujours un plantage aléatoire. Il semblerait que ce soit sur une InfoMorceau spécifique que sa plante. Les autres ne posent pas de problème. Est-ce un cas particulier ?
Mon calloc ressemble maintenant à ceci :
Code:
tabMorceaux = (char**)calloc(nbMorceaux,sizeof(char));

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

resolu Re: [C] TD5 - EX14

Message  nvs le Mer 10 Nov 2010, 08:42

Dj x-fuse a écrit:tabMorceaux correspond à l'idée perçue de "la ligne 7" (une chaine de pointeurs). Ainsi, je n'aurais plus qu'à "coller" les différentes valeurs des pointeurs de cette chaine et j'obtiendrais mon texte.
faudrait que tu développes la notion de chaîne de pointeurs... tu veux dire des pointeurs à la queue leu leu ?

Dj x-fuse a écrit:La taille me semble correcte, à savoir autant de "cases" qu'il y a de morceaux différents du texte. Ces cases pointes chacunes vers une chaine de caractère (un "morceau").
si les cases pointes chacunes vers une chaine de caractère, alors la taille n'est pas correcte (d'où le plantage probablement) car ton calloc ressemble maintenant à ceci :
Code:
tabMorceaux = (char**)calloc(nbMorceaux,sizeof(char));


Dj x-fuse a écrit:J'utilise maintenant calloc car cela me permet d'être certain qu'à l'allocation j'écrase les valeurs précédentes qui se trouvaient à cet endroit.
je ne vois pas trop l'intérêt. c'est, éventuellement, l'autre allocation dynamique de ton code qui pourrait mériter un calloc.








No

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

resolu Re: [C] TD5 - EX14

Message  Dj x-fuse le Mer 10 Nov 2010, 10:57

nvs a écrit:faudrait que tu développes la notion de chaîne de pointeurs... tu veux dire des pointeurs à la queue leu leu ?

si les cases pointes chacunes vers une chaine de caractère, alors la taille n'est pas correcte (d'où le plantage probablement) car ton calloc ressemble maintenant à ceci :
Code:
tabMorceaux = (char**)calloc(nbMorceaux,sizeof(char));


je ne vois pas trop l'intérêt. c'est, éventuellement, l'autre allocation dynamique de ton code qui pourrait mériter un calloc.
* Une chaine de pointeurs ressemble à ceci :

* Je devrais allouer 1 octet par pointeur et non 1octet * sizeof(char), mais le problème ne proviens pas de là. (Modification effectuée, j'utilise alors malloc(nbMorceaux)).

* Effectivement, il n'y a aucun intérêt à faire un calloc alors que je vais placer des adresses dans cette zone. Le calloc serait utile pour l'allocation mémoire du texte final (d'où ce problème de premier caractère étrange) dans le cas où je colle directement à la suite du texte final chaque morceaux (via strcat).

Mais je n'en suis pas encore là, j'ai toujours ce problème de plantage 1 fois sur 10... Etrange, étrange...

Je suis toujours dans le brouillard :/

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

resolu Re: [C] TD5 - EX14

Message  nvs le Mer 10 Nov 2010, 14:02

Dj x-fuse a écrit:* Une chaine de pointeurs ressemble à ceci :
j'appellerais ça plutôt un tableau de pointeurs.

Dj x-fuse a écrit:* Je devrais allouer 1 octet par pointeur et non 1octet * sizeof(char), mais le problème ne proviens pas de là. (Modification effectuée, j'utilise alors malloc(nbMorceaux)).
1 octet par pointeur Shocked t'es sûr ?

note que la notion d'octet n'apparaît pas (à ma connaissance) dans le standard c (ou c++). seul le terme byte est repris. ainsi, sizeof(char) retourne toujours 1, ce qui définit la notion de byte en c : c'est la taille d'un caractère. sa valeur en octet est variable d'une architecture à l'autre... mais, cela n'a pas directement à voir avec tes soucis présents Smile








alien

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

resolu Re: [C] TD5 - EX14

Message  Contenu sponsorisé Aujourd'hui à 07:12


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 2 Précédent  1, 2

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum