fich_s = (char *) malloc(strlen("Nouvelle chaine")); Pour cet usage, utlise:
char *fich_s = strdup("Nouvelle chaine");
strdup n'est pas standard.
À choisir entre strdup (non standard mais présent presque partout, et facile à rajouter s'il le faut) et le bogue classique sans effet pervers trois fois sur quatre (à cause de l'arrondi de taille que fait malloc),... mon c½ur balance.
Enfin avec un peu de chance, nous aurons un nouveau qui fera maintenant attention aux +1, maintenant.
Antoine
En ck0k98$2pf$1@sunnews.cern.ch, Laurent Deniau va escriure:
fich_s = (char *) malloc(strlen("Nouvelle chaine"));
Pour cet usage, utlise:
char *fich_s = strdup("Nouvelle chaine");
strdup n'est pas standard.
À choisir entre strdup (non standard mais présent presque partout, et facile
à rajouter s'il le faut) et le bogue classique sans effet pervers trois fois
sur quatre (à cause de l'arrondi de taille que fait malloc),... mon c½ur
balance.
Enfin avec un peu de chance, nous aurons un nouveau qui fera maintenant
attention aux +1, maintenant.
fich_s = (char *) malloc(strlen("Nouvelle chaine")); Pour cet usage, utlise:
char *fich_s = strdup("Nouvelle chaine");
strdup n'est pas standard.
À choisir entre strdup (non standard mais présent presque partout, et facile à rajouter s'il le faut) et le bogue classique sans effet pervers trois fois sur quatre (à cause de l'arrondi de taille que fait malloc),... mon c½ur balance.
Enfin avec un peu de chance, nous aurons un nouveau qui fera maintenant attention aux +1, maintenant.
Antoine
Marc Boyer
In article <ck0rgu$mir$, Antoine Leca wrote:
En ck0k98$2pf$, Laurent Deniau va escriure:
fich_s = (char *) malloc(strlen("Nouvelle chaine")); Pour cet usage, utlise:
char *fich_s = strdup("Nouvelle chaine");
strdup n'est pas standard.
À choisir entre strdup (non standard mais présent presque partout, et facile à rajouter s'il le faut) et le bogue classique sans effet pervers trois fois sur quatre (à cause de l'arrondi de taille que fait malloc),... mon c½ur balance.
Surtout que, comme je dis souvent, mieux vaut un code qui ne compile pas qu'un code qui compile avec un bug. Bon, après, c'est vrai que faire un code qui ajoute strdup quand il y est pas mais ne l'ajoute pas s'il y est déjà, ça peut être pénible...
Marc Boyer -- La contractualisation de la recherche, c'est me donner de l'argent pour faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce que je sais faire, je le fais sans moyens...
In article <ck0rgu$mir$1@shakotay.alphanet.ch>, Antoine Leca wrote:
En ck0k98$2pf$1@sunnews.cern.ch, Laurent Deniau va escriure:
fich_s = (char *) malloc(strlen("Nouvelle chaine"));
Pour cet usage, utlise:
char *fich_s = strdup("Nouvelle chaine");
strdup n'est pas standard.
À choisir entre strdup (non standard mais présent presque partout, et facile
à rajouter s'il le faut) et le bogue classique sans effet pervers trois fois
sur quatre (à cause de l'arrondi de taille que fait malloc),... mon c½ur
balance.
Surtout que, comme je dis souvent, mieux vaut un code qui ne compile
pas qu'un code qui compile avec un bug.
Bon, après, c'est vrai que faire un code qui ajoute strdup quand
il y est pas mais ne l'ajoute pas s'il y est déjà, ça peut être pénible...
Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...
fich_s = (char *) malloc(strlen("Nouvelle chaine")); Pour cet usage, utlise:
char *fich_s = strdup("Nouvelle chaine");
strdup n'est pas standard.
À choisir entre strdup (non standard mais présent presque partout, et facile à rajouter s'il le faut) et le bogue classique sans effet pervers trois fois sur quatre (à cause de l'arrondi de taille que fait malloc),... mon c½ur balance.
Surtout que, comme je dis souvent, mieux vaut un code qui ne compile pas qu'un code qui compile avec un bug. Bon, après, c'est vrai que faire un code qui ajoute strdup quand il y est pas mais ne l'ajoute pas s'il y est déjà, ça peut être pénible...
Marc Boyer -- La contractualisation de la recherche, c'est me donner de l'argent pour faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce que je sais faire, je le fais sans moyens...
Emmanuel Delahaye
Florent 'flure' C. wrote on 05/10/04 :
Mais alors, que deviennent les 9 octets précédemment alloués ?
Ils sont toujours alloués (durée de vie égale à celle du programme)
C'est donc bien ce que je craignais : une fuite de mémoire !!!
Non. Dans un environnement hégbergé (OS), les allocations statiques sont libérées automatiquement lorsque le programme se termine. C'est le système qui s'occupe de ça...
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Florent 'flure' C. wrote on 05/10/04 :
Mais alors, que deviennent les 9 octets précédemment alloués ?
Ils sont toujours alloués (durée de vie égale à celle du programme)
C'est donc bien ce que je craignais : une fuite de mémoire !!!
Non. Dans un environnement hégbergé (OS), les allocations statiques
sont libérées automatiquement lorsque le programme se termine. C'est le
système qui s'occupe de ça...
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
Mais alors, que deviennent les 9 octets précédemment alloués ?
Ils sont toujours alloués (durée de vie égale à celle du programme)
C'est donc bien ce que je craignais : une fuite de mémoire !!!
Non. Dans un environnement hégbergé (OS), les allocations statiques sont libérées automatiquement lorsque le programme se termine. C'est le système qui s'occupe de ça...
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Emmanuel Delahaye
Florent 'flure' C. wrote on 06/10/04 :
Florent 'flure' C. wrote:
C'est donc bien ce que je craignais : une fuite de mémoire !!!
Ahlala, si tu avais commencé par apprendre l'assembleur ! ;-)
Le pire, c'est que j'en ai fait beaucoup, y compris professionnellement, et je n'avais pas fait le lien entre les chaînes statiques en C et celles en asm. Désolé, honte à moi.
T'as jamais utilisé un debugger ?
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Florent 'flure' C. wrote on 06/10/04 :
Florent 'flure' C. wrote:
C'est donc bien ce que je craignais : une fuite de mémoire !!!
Ahlala, si tu avais commencé par apprendre l'assembleur ! ;-)
Le pire, c'est que j'en ai fait beaucoup, y compris professionnellement,
et je n'avais pas fait le lien entre les chaînes statiques en C et celles
en asm. Désolé, honte à moi.
T'as jamais utilisé un debugger ?
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
C'est donc bien ce que je craignais : une fuite de mémoire !!!
Ahlala, si tu avais commencé par apprendre l'assembleur ! ;-)
Le pire, c'est que j'en ai fait beaucoup, y compris professionnellement, et je n'avais pas fait le lien entre les chaînes statiques en C et celles en asm. Désolé, honte à moi.
T'as jamais utilisé un debugger ?
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Emmanuel Delahaye
Florent Clairambault wrote on 06/10/04 :
En fait, un prof d'info m'a dis que c'était : pour char* fich_s; fich_s = (char *) malloc(strlen("Nouvelle chaine"));
Voila, j'ai l'étrange impression, que c'est pas encore gagné pour tout le monde la programmation...
Ce prof d'info mérite le goudron et les plumes...
pour char* fich_s = malloc(strlen("Nouvelle chaine") + 1);
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Florent Clairambault wrote on 06/10/04 :
En fait, un prof d'info m'a dis que c'était :
pour char* fich_s;
fich_s = (char *) malloc(strlen("Nouvelle chaine"));
Voila, j'ai l'étrange impression, que c'est pas encore gagné pour tout le
monde la programmation...
Ce prof d'info mérite le goudron et les plumes...
pour char* fich_s = malloc(strlen("Nouvelle chaine") + 1);
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
Un cas classique de "ca compile donc c'est bon!" ;-)
Chqrlie.
Antoine Leca
En , Emmanuel Delahaye va escriure:
Charlie Gordon wrote on 06/10/04 :
char *fich_s = strdup("Nouvelle chaine");
Attention. Standard Posix
Même pas. C'est XSI (X/Open, alias Single Unix), un sur-ensemble de Posix, présent sur tous les systèmes héritiers de Unix mais qui peut manquer sur les systèmes plus baroques.
Maintenant celui-là en particulier est très souvent présent. Mais c'est important de savoir quel est la norme impliquée, pour choisir à bon escient les options de configuration (ici, -D_XOPEN_SOURCE devrait le faire).
Antoine
En mn.34867d4aac0d70c6.15512@YOURBRAnoos.fr,
Emmanuel Delahaye va escriure:
Charlie Gordon wrote on 06/10/04 :
char *fich_s = strdup("Nouvelle chaine");
Attention. Standard Posix
Même pas. C'est XSI (X/Open, alias Single Unix), un sur-ensemble de Posix,
présent sur tous les systèmes héritiers de Unix mais qui peut manquer sur
les systèmes plus baroques.
Maintenant celui-là en particulier est très souvent présent. Mais c'est
important de savoir quel est la norme impliquée, pour choisir à bon escient
les options de configuration (ici, -D_XOPEN_SOURCE devrait le faire).
Même pas. C'est XSI (X/Open, alias Single Unix), un sur-ensemble de Posix, présent sur tous les systèmes héritiers de Unix mais qui peut manquer sur les systèmes plus baroques.
Maintenant celui-là en particulier est très souvent présent. Mais c'est important de savoir quel est la norme impliquée, pour choisir à bon escient les options de configuration (ici, -D_XOPEN_SOURCE devrait le faire).
Antoine
Michel Billaud
"Charlie Gordon" writes:
Je cite pour l'exemple un bug surprenant que j'ai rencontré plusieurs fois avec des programmeurs pourtant plus débutants :
Un cas classique de "ca compile donc c'est bon!" ;-)
avec -1, ça peut marcher avec une probabilité non nulle.
MB
-- Michel BILLAUD LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792 351, cours de la Libération http://www.labri.fr/~billaud 33405 Talence (FRANCE)
"Charlie Gordon" <news@chqrlie.org> writes:
Je cite pour l'exemple un bug surprenant que j'ai rencontré plusieurs fois
avec des programmeurs pourtant plus débutants :
Un cas classique de "ca compile donc c'est bon!" ;-)
avec -1, ça peut marcher avec une probabilité non nulle.
MB
--
Michel BILLAUD billaud@labri.fr
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)
Un cas classique de "ca compile donc c'est bon!" ;-)
avec -1, ça peut marcher avec une probabilité non nulle.
MB
-- Michel BILLAUD LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792 351, cours de la Libération http://www.labri.fr/~billaud 33405 Talence (FRANCE)