P.S. Ne doit être libéré par free() que ce qui a été alloué par malloc().
Il aurait donc appris.
warning: possible use of citation before initialisation
Florent 'flure' C.
Le Tue, 05 Oct 2004 22:59:37 +0200, Jean-Marc a écrit :
Il aurait donc appris. (et il y a de quoi faire...)
D'accord, j'admets mon erreur. Mais je me pose quand même la question de ce que devient la mémoire dans un cas comme celui-ci : char* s = "totototo"; s = "toto";
Arrêtez-moi vite si je me trompe, mais j'ai l'impression que là on change carrément l'adresse de la chaîne pour la faire pointer sur une autre. Mais alors, que deviennent les 9 octets précédemment alloués ? La zone mémoire précédemment pointée par s sera-t-elle rendue disponible ou bien est-elle perdue jusqu'à la fin de l'exécution du programme ? Et si l'on refait : s = "totototo"; Est-ce qu'alors s aura la même valeur qu'elle avait lors de sa première initialisation, ou bien encore une nouvelle ?
En bref soit je suis complètement à côté de la plaque, soit je découvre aujourd'hui quelque chose du C : 1) que je ne comprends pas 2) dont je ne saisis pas l'interêt (n'est-ce pas source d'erreurs ?)
Merci d'avance pour les explications, -- Florent "flure" C. Décrypter l'@ pour répondre Coders don't die, they just JMP without RET !
Le Tue, 05 Oct 2004 22:59:37 +0200, Jean-Marc a écrit :
Il aurait donc appris. (et il y a de quoi faire...)
D'accord, j'admets mon erreur.
Mais je me pose quand même la question de ce que devient la mémoire dans
un cas comme celui-ci :
char* s = "totototo";
s = "toto";
Arrêtez-moi vite si je me trompe, mais j'ai l'impression que là on
change carrément l'adresse de la chaîne pour la faire pointer sur une
autre. Mais alors, que deviennent les 9 octets précédemment alloués ?
La zone mémoire précédemment pointée par s sera-t-elle rendue
disponible ou bien est-elle perdue jusqu'à la fin de l'exécution du
programme ?
Et si l'on refait :
s = "totototo";
Est-ce qu'alors s aura la même valeur qu'elle avait lors de sa première
initialisation, ou bien encore une nouvelle ?
En bref soit je suis complètement à côté de la plaque, soit je
découvre aujourd'hui quelque chose du C :
1) que je ne comprends pas
2) dont je ne saisis pas l'interêt (n'est-ce pas source d'erreurs ?)
Merci d'avance pour les explications,
--
Florent "flure" C.
Décrypter l'@ pour répondre
Coders don't die, they just JMP without RET !
Le Tue, 05 Oct 2004 22:59:37 +0200, Jean-Marc a écrit :
Il aurait donc appris. (et il y a de quoi faire...)
D'accord, j'admets mon erreur. Mais je me pose quand même la question de ce que devient la mémoire dans un cas comme celui-ci : char* s = "totototo"; s = "toto";
Arrêtez-moi vite si je me trompe, mais j'ai l'impression que là on change carrément l'adresse de la chaîne pour la faire pointer sur une autre. Mais alors, que deviennent les 9 octets précédemment alloués ? La zone mémoire précédemment pointée par s sera-t-elle rendue disponible ou bien est-elle perdue jusqu'à la fin de l'exécution du programme ? Et si l'on refait : s = "totototo"; Est-ce qu'alors s aura la même valeur qu'elle avait lors de sa première initialisation, ou bien encore une nouvelle ?
En bref soit je suis complètement à côté de la plaque, soit je découvre aujourd'hui quelque chose du C : 1) que je ne comprends pas 2) dont je ne saisis pas l'interêt (n'est-ce pas source d'erreurs ?)
Merci d'avance pour les explications, -- Florent "flure" C. Décrypter l'@ pour répondre Coders don't die, they just JMP without RET !
Emmanuel Delahaye
cedric wrote on 05/10/04 :
Jean-Marc wrote:
Emmanuel a écrit:
P.S. Ne doit être libéré par free() que ce qui a été alloué par malloc().
Il aurait donc appris.
warning: possible use of citation before initialisation
'citation'? Tu veux dire 'quote', bien sûr...
-- 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"
cedric wrote on 05/10/04 :
Jean-Marc wrote:
Emmanuel a écrit:
P.S. Ne doit être libéré par free() que ce qui a été alloué par
malloc().
Il aurait donc appris.
warning: possible use of citation before initialisation
'citation'? Tu veux dire 'quote', bien sûr...
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
P.S. Ne doit être libéré par free() que ce qui a été alloué par malloc().
Il aurait donc appris.
warning: possible use of citation before initialisation
'citation'? Tu veux dire 'quote', bien sûr...
-- 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 05/10/04 :
Mais je me pose quand même la question de ce que devient la mémoire dans un cas comme celui-ci : char* s = "totototo"; s = "toto";
La zone qui contient "totototo" n'est plus accessible. Ca mort pas!
Arrêtez-moi vite si je me trompe, mais j'ai l'impression que là on change carrément l'adresse de la chaîne pour la faire pointer sur une autre.
On change la valeur d'un pointeur, c'est tout.
http://mapage.noos.fr/emdel/notes.htm#pointeurs
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)
La zone mémoire précédemment pointée par s sera-t-elle rendue disponible ou bien est-elle perdue jusqu'à la fin de l'exécution du programme ?
Elle n'est pas rendue, puisque l'allocation est statique.
Et si l'on refait : s = "totototo"; Est-ce qu'alors s aura la même valeur qu'elle avait lors de sa première initialisation, ou bien encore une nouvelle ?
Oui, non, peut être... ce n'est pas défini. Un compilateur raisonnable devrai donner la même adresse, si il sit faire le 'string merging'. Question d'implémentation.
-- 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 je me pose quand même la question de ce que devient la mémoire dans
un cas comme celui-ci :
char* s = "totototo";
s = "toto";
La zone qui contient "totototo" n'est plus accessible. Ca mort pas!
Arrêtez-moi vite si je me trompe, mais j'ai l'impression que là on
change carrément l'adresse de la chaîne pour la faire pointer sur une
autre.
On change la valeur d'un pointeur, c'est tout.
http://mapage.noos.fr/emdel/notes.htm#pointeurs
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)
La zone mémoire précédemment pointée par s sera-t-elle rendue
disponible ou bien est-elle perdue jusqu'à la fin de l'exécution du
programme ?
Elle n'est pas rendue, puisque l'allocation est statique.
Et si l'on refait :
s = "totototo";
Est-ce qu'alors s aura la même valeur qu'elle avait lors de sa première
initialisation, ou bien encore une nouvelle ?
Oui, non, peut être... ce n'est pas défini. Un compilateur raisonnable
devrai donner la même adresse, si il sit faire le 'string merging'.
Question d'implémentation.
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
Mais je me pose quand même la question de ce que devient la mémoire dans un cas comme celui-ci : char* s = "totototo"; s = "toto";
La zone qui contient "totototo" n'est plus accessible. Ca mort pas!
Arrêtez-moi vite si je me trompe, mais j'ai l'impression que là on change carrément l'adresse de la chaîne pour la faire pointer sur une autre.
On change la valeur d'un pointeur, c'est tout.
http://mapage.noos.fr/emdel/notes.htm#pointeurs
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)
La zone mémoire précédemment pointée par s sera-t-elle rendue disponible ou bien est-elle perdue jusqu'à la fin de l'exécution du programme ?
Elle n'est pas rendue, puisque l'allocation est statique.
Et si l'on refait : s = "totototo"; Est-ce qu'alors s aura la même valeur qu'elle avait lors de sa première initialisation, ou bien encore une nouvelle ?
Oui, non, peut être... ce n'est pas défini. Un compilateur raisonnable devrai donner la même adresse, si il sit faire le 'string merging'. Question d'implémentation.
-- 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.
Le Tue, 05 Oct 2004 23:51:15 +0200, Emmanuel Delahaye a écrit :
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 !!!
-- Florent "flure" C. Décrypter l'@ pour répondre Coders don't die, they just JMP without RET !
Le Tue, 05 Oct 2004 23:51:15 +0200, Emmanuel Delahaye a écrit :
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 !!!
--
Florent "flure" C.
Décrypter l'@ pour répondre
Coders don't die, they just JMP without RET !