C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

const string et headers

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
damien gautherin
Guest





PostPosted: Mon Apr 19, 2004 8:53 pm    Post subject: const string et headers Reply with quote



Bonsoir à tous,

je me pose quelques questions sur l'utilisation de const avec des objets
string dans un header. Je m'explique:

Je recupere un projet dans lequel un certains nombre de const string
sont declares et definis dans un header qui est ensuite inclus dans un
certains nombre de fichiers c++.

myhead.h
const string my_string="string1";

mymod1.cpp
#include "myhead.h"
.....

mymod2.cpp
#include "myhead.h"
.....


Si je comprends bien lors de la compilation, chaque *module* incluant le
header concerne possede un objet my_string qui lui est propre.

Maintenant, à l'utilisation il arrive que le contenu de cette variable
soit modifié ( pas intentionellement en tout cas Wink ) pour l'un des
*module*.
Je vais donc me lancer dans une recherche de depassement de tampon qq
part qui pourrait introduire un ecrasement du contenu initiale de ma
variable, mais avant je voudrais juste avoir confirmation que l'espace
memoire reservé à cette variable dans chaque module ne peux pas se
retrouver alloué dans un autre. Oui je me doute que la réponse à cette
question est non => ya un bug dans ton programme, mais bon le doute
m'assaille ;-)

Merci aux courageux qui auront eu le courage de suivre ces qq ligne ;-)

A+
Damien
Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Tue Apr 20, 2004 7:47 am    Post subject: Re: const string et headers Reply with quote



damien gautherin <spam (AT) xpow (DOT) org> wrote


Quote:
je me pose quelques questions sur l'utilisation de const avec des
objets string dans un header. Je m'explique:

Je recupere un projet dans lequel un certains nombre de const string
sont declares et definis dans un header qui est ensuite inclus dans un
certains nombre de fichiers c++.

myhead.h
const string my_string="string1";

mymod1.cpp
#include "myhead.h"
....

mymod2.cpp
#include "myhead.h"
....

Si je comprends bien lors de la compilation, chaque *module* incluant
le header concerne possede un objet my_string qui lui est propre.

Tout à fait. Aussi, chaque instance est construite dynamiquement, dans
un ordre indéfini.

Dans l'ensemble, je n'aime pas cette solution. Ou bien, j'utiliserai une
fonction qui renvoie la chaîne en question (en la construisant la
première fois appelée), ou bien, je me servirais des constantes de
chaîne à la C, tout simplement.

Quote:
Maintenant, à l'utilisation il arrive que le contenu de cette variable
soit modifié ( pas intentionellement en tout cas Wink ) pour l'un des
*module*.

Je vais donc me lancer dans une recherche de depassement de tampon
qq part qui pourrait introduire un ecrasement du contenu initiale de
ma variable, mais avant je voudrais juste avoir confirmation que
l'espace memoire reservé à cette variable dans chaque module ne peux
pas se retrouver alloué dans un autre.

Normalement non. Maintenant, si tu as un comportement indéfini ailleurs
dans le programme... Si tu te doutes d'un dépassement de tampon, et
c'est réelement le cas, il faut s'attendre à tout. Si par exemple le tas
se trouve corrompu, c'est possible que new renvoie l'adresse d'une zone
déjà allouée, par exemple.

Quote:
Oui je me doute que la réponse à cette question est non => ya un bug
dans ton programme, mais bon le doute m'assaille Wink

Si une chaîne définie const change de valeur, ce ne peut être que suite
à une erreur dans ton programme. Si deux objets de type std::string
partage la même mémoire, en revanche, ne signifie rien ; il y a des
implémentations où c'est le cas. Mais tout en étant légal, ça
m'étonnerait dans le cas où toutes les chaînes ont été construites à
partir des chaînes constantes du compilateur.

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
damien gautherin
Guest





PostPosted: Wed Apr 21, 2004 8:40 am    Post subject: Re: const string et headers Reply with quote




Quote:
Normalement non. Maintenant, si tu as un comportement indéfini ailleurs
dans le programme... Si tu te doutes d'un dépassement de tampon, et
c'est réelement le cas, il faut s'attendre à tout. Si par exemple le tas
se trouve corrompu, c'est possible que new renvoie l'adresse d'une zone
déjà allouée, par exemple.

Bon c'est bien ce dont j'etais persuadé....reste plus qu'a me mettre en
quete de la source de ce pb :-)

Damien

Back to top
BlackGoddess
Guest





PostPosted: Wed Apr 21, 2004 1:00 pm    Post subject: Re: const string et headers Reply with quote


<kanze (AT) gabi-soft (DOT) fr> a écrit dans le message de
news:d6652001.0404192347.726c37f5 (AT) posting (DOT) google.com...
Quote:
damien gautherin <spam (AT) xpow (DOT) org> wrote in message
news:<c61e7v$975$1 (AT) aphrodite (DOT) grec.isp.9tel.net>...

je me pose quelques questions sur l'utilisation de const avec des
objets string dans un header. Je m'explique:

Je recupere un projet dans lequel un certains nombre de const string
sont declares et definis dans un header qui est ensuite inclus dans un
certains nombre de fichiers c++.

myhead.h
const string my_string="string1";

mymod1.cpp
#include "myhead.h"
....

mymod2.cpp
#include "myhead.h"
....

Si je comprends bien lors de la compilation, chaque *module* incluant
le header concerne possede un objet my_string qui lui est propre.

Tout à fait. Aussi, chaque instance est construite dynamiquement, dans
un ordre indéfini.

Dans l'ensemble, je n'aime pas cette solution. Ou bien, j'utiliserai une
fonction qui renvoie la chaîne en question (en la construisant la
première fois appelée), ou bien, je me servirais des constantes de
chaîne à la C, tout simplement.

on pourrait peut-etre utiliser :

myhead.h
extern const std::string my_string;

mymod1.cpp
#include "myhead.h"
const std::string my_string="string1";
.....

mymod2.cpp
#include "myhead.h"
.....

Quote:
Maintenant, à l'utilisation il arrive que le contenu de cette variable
soit modifié ( pas intentionellement en tout cas Wink ) pour l'un des
*module*.

Je vais donc me lancer dans une recherche de depassement de tampon
qq part qui pourrait introduire un ecrasement du contenu initiale de
ma variable, mais avant je voudrais juste avoir confirmation que
l'espace memoire reservé à cette variable dans chaque module ne peux
pas se retrouver alloué dans un autre.

Normalement non. Maintenant, si tu as un comportement indéfini ailleurs
dans le programme... Si tu te doutes d'un dépassement de tampon, et
c'est réelement le cas, il faut s'attendre à tout. Si par exemple le tas
se trouve corrompu, c'est possible que new renvoie l'adresse d'une zone
déjà allouée, par exemple.

Oui je me doute que la réponse à cette question est non => ya un bug
dans ton programme, mais bon le doute m'assaille ;-)

Si une chaîne définie const change de valeur, ce ne peut être que suite
à une erreur dans ton programme. Si deux objets de type std::string
partage la même mémoire, en revanche, ne signifie rien ; il y a des
implémentations où c'est le cas. Mais tout en étant légal, ça
m'étonnerait dans le cas où toutes les chaînes ont été construites à
partir des chaînes constantes du compilateur.

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Thu Apr 22, 2004 9:10 am    Post subject: Re: const string et headers Reply with quote

"BlackGoddess" <ds.blackgoddess (AT) ifrance (DOT) com> wrote

Quote:
kanze (AT) gabi-soft (DOT) fr> a écrit dans le message de
news:d6652001.0404192347.726c37f5 (AT) posting (DOT) google.com...
damien gautherin <spam (AT) xpow (DOT) org> wrote in message
news:<c61e7v$975$1 (AT) aphrodite (DOT) grec.isp.9tel.net>...

je me pose quelques questions sur l'utilisation de const avec des
objets string dans un header. Je m'explique:

Je recupere un projet dans lequel un certains nombre de const
string sont declares et definis dans un header qui est ensuite
inclus dans un certains nombre de fichiers c++.

myhead.h
const string my_string="string1";

mymod1.cpp
#include "myhead.h"
....

mymod2.cpp
#include "myhead.h"
....

Si je comprends bien lors de la compilation, chaque *module*
incluant le header concerne possede un objet my_string qui lui est
propre.

Tout à fait. Aussi, chaque instance est construite dynamiquement,
dans un ordre indéfini.

Dans l'ensemble, je n'aime pas cette solution. Ou bien, j'utiliserai
une fonction qui renvoie la chaîne en question (en la construisant
la première fois appelée), ou bien, je me servirais des constantes
de chaîne à la C, tout simplement.

on pourrait peut-etre utiliser :

myhead.h
extern const std::string my_string;

mymod1.cpp
#include "myhead.h"
const std::string my_string="string1";
....

mymod2.cpp
#include "myhead.h"
....

Ça dépend du contenu de mymod2.cpp. Si c'est :

#include "myhead.h"

std::string const string2 = my_string + ".hpp" ;

par exemple, il y a un comportement indéfini -- si ça marche ou non
risque de dépendre (d'une façon non documentée et non garantie) de
l'ordre que les modules sont incorporés lors de l'édition des liens.

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.