Problème d'affectation (lib - vc2005)

Problème d'affectation (lib - vc2005) - C++ - Programmation

Marsh Posté le 03-03-2008 à 14:58:01    

Bonjour,
 
Je suis confronté à un curieux problème lors de l'affectation d'une valeur à une variable.
Tout d'abord j'utilise en fait une bibliothèque static (créée par mes soins) dans l'un de mes programmes.
 
Dans cette bibliothèque j'ai entre autre une classe qui contient trois entiers:
int a, b, c;
 
Dans mon programme je récupère un objet du type de ma classe et les entiers ont les valeurs
a=1, b=2, c=3
 
et quand je fais
int test = mon_objet->b;
test vaut 1!!! (et non 2)
 
En récupérant non pas la valeur mais l'adresse de la variable:
int *test = &(mon_objet->b);
je m'appercois qu'en fait test a l'adresse de la variable a!!!
 
J'ai donc pensé à un problème d'alignement mémoire et essayé d'imposer tel ou tel alignement (toujours les 2 même) lors de la compilation de ma lib et de mon programme
(option /Zp dans visual cpp 2005).
 
(Je précise que j'ai tout testé en mode debug pas à pas et que le compilateur me donne bien ces abérations quand je regarde les valeurs de mes variables).
 
Si quelqu'un aurait une idée...
 
Merci

Reply

Marsh Posté le 03-03-2008 à 14:58:01   

Reply

Marsh Posté le 03-03-2008 à 17:23:24    

Un bout de code stp

Reply

Marsh Posté le 03-03-2008 à 23:33:42    

A mon avis t'es en train de débugger un vieil exe, c'est à dire que ton source correspond pas au programme qui tourne.

Reply

Marsh Posté le 05-03-2008 à 17:12:54    

Ace17: Du tout. Si, dans mon projet visual de ma lib je fais "clean" (donc pour supprimer les fichiers compilés), et que je vais compiler mon projet qui utilise cette lib, ca ne link pas! (erreur lib non trouvée)
 
Joel F: Je ne vois pas ce que ca pourrai apporter de plus mais voici:
 
La déclaration de mon objet dans ma lib:
 
class DAttributes {
public:
 DAttributes();
 ~DAttributes();
public:
 const char *get_name();
 int get_oneWay();
 int get_maxSpeed();
 int get_nameRef();
public:
 void clear();
 void set_attribute(int type, int value);
public:  
 std::string name;
 int oneWay;
 int maxSpeed;
public:
 int name_ref;
};
 
Et dans le code de mon programme principal:
 
DAttributes *att = seg->attributes;
int *nr = &att->name_ref;
int nr2 = att->get_nameRef();
 
 
Si je regarde ce que vaut nr, il vaut l'adresse de l'attribut maxSpeed dans mon objet att.
Et nr2 vaut la valeur de maxSpeed.
Donc il y a bien un décalage.
 
Bon je précise que j'ai rajouté des accesseurs (get_maxSpeed, get_nameRef) à ma classe DAttributes, et qu'en passant par ces fonctions, je n'ai plus de problème.
 
(Mais bon, ca reste quand même pas très normal ce décalage...)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed