IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Probleme de declaration


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Par défaut Probleme de declaration
    Bonjour, ca doit faire environ 3 ans que je fais du C++ autodidacte, et recement je suis tombé sur un probleme que me laisse sans voix .
    Je declare une classe avec des variables notament une structure ( c'est elle qui est en question).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Cping_server	*parent_server;
    struct in_addr	ip;
    unsigned short	id;				
    LARGE_INTEGER	ticks;			
    TCHAR			*tszName;		
    TCHAR			*tszAddress;	
    float			ping;
    Jusque la pas de probleme.
    Du moins jusqu'a que j'appel une fonction qui me retourne l'addresse contenu dans tszName. Et la c'est le drame, le programme plante. En cherchant un peut, j'ai trouvé que l'adresse retourné par la fonction était l'addresse contenu a la memoire de tszName + 4.Ce qui cause un probleme.
    Pourquoi cela????
    Le moyen que j'ai trouvé pour resoudre le probleme est de declarer comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Cping_server	*parent_server;
    unsigned short	id;				
    LARGE_INTEGER	ticks;			
    TCHAR			*tszName;		
    TCHAR			*tszAddress;	
    float			ping;	
    struct in_addr	ip;
    Je comprend plus rien...
    Merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si tu commençais par nous montrer le code en question ? Le top du top, ce serait un code minimal mais ocmplet qui reproduit le problème.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class	Cping_packet
    {
    	friend class	Cping_server;
    	friend class	Cping_sender;
    	friend class	Cresolve_server;
    private:
    	Cping_server	*parent_server;
    	unsigned short	id;				
    	LARGE_INTEGER	ticks;			
    	TCHAR			*tszName;		
    	TCHAR			*tszAddress;	
    	float			ping;			
    	struct in_addr	ip;			
    public:
     
    	inline TCHAR *getAddress()
    	{
    		return tszAddress;
    	}
     
    	inline TCHAR *getName()
    	{
    		return tszName;
    	}
     
    	inline float getPing()
    	{
    		return ping;
    	}
     
    	inline unsigned int getIntAddr()
    	{
    		return ip.S_un.S_un_b.s_b4 + (ip.S_un.S_un_b.s_b3 << 8) + (ip.S_un.S_un_b.s_b2 << 16) + (ip.S_un.S_un_b.s_b1 << 24);
    	}
     
    	Cping_packet(struct in_addr &s_address, Cping_server *parent);
    	~		Cping_packet();
    	void	send();
    };
    voila la classe le reste n'importe pas dans le probleme

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Par défaut
    Voila j'ai encore une classe contaminé par ce probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    class			Cthread
    {
    	friend DWORD WINAPI runThread(LPVOID lpParam);
    private:
    	DWORD	threadId;
    	HANDLE	threadHandle;
    	bool	_stop;
    protected:
     
    	virtual void run()
    	{
    	};
    public:
    	Cthread();
    	~		Cthread();
     
    	void	start();
    	void	stop();
    	void	kill();
    	void	wait(int time);
     
    	inline bool isRunning()
    	{
    		if(threadHandle != NULL) return true;
    		return false;
    	};
    };
    sans
    le bool _stop;
    tout marche bien.
    Avec, au moment de la creation
    threadHandle = NULL ;
    n'est pas effectué correctement.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu as des problèmes ailleurs dans ton code. Essaye d'extraire un exemple complet minimal qui reproduit le problème.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    salut, essaye d'utiliser ta classe SEULE, sans autre code à coté, et à mon avis tu n'auras plus le pb.
    A tous les coups, tu dois "eclater" une variable ailleurs ...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Par défaut
    J'ai trouvé le probleme, et il n'avait rien n'avoir avec mon code.(comme certain le pensait). Il etait dut au struct qui sont des unions (des structs de l'API windows). si je les enleve (ou les mettait en bas de mes declarations, le code marchait, autrement certaine variable etait décalé dans le memoire). J'ai resolu le probleme en mettant
    Alignement des membres de la structure : 4 octets (/Zp4)
    dans les options du compilateur

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Bizarre... Ca sent quand même la grosse bidouille. Tu utilises quel compilateur ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Par défaut
    Celui de visual studio.
    Je vois pas pourquoi cela viendrais de mon code?

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par Blackhorn
    Je vois pas pourquoi cela viendrais de mon code?
    Parce qu'il n'y a aucune raison que cela produise un tel comportement. Pour en être certain, écris un code minimal avec une structure contenant un membre qui pose problème, et regarde si le comportement est le même.

    Quelle version de Visual C++ utilises-tu ?

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    j'utilise aussi les "struct in_addr", sous VC++ 6 et 2005, et j'ai jamais eu besoin de les décaller à la fin de mes déclarations. Et encore heureux !
    Moi si j'était toi, j'essaierai quand même avec ton code dans un exemple minimal ...

    @+

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Par défaut
    Je testerais plus tard la ca marche... Mais la tout remarche parfaitement depuis que j'ai fait la manip du compilateur.
    Ps : http://www.kamron.net/french/prog/tips.php
    -3. Padding
    je pense que le probleme vien de ce qui est dit la...
    une page qui parle du meme probleme http://www.thescripts.com/forum/thread264055.html

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de déclaration de tableaux
    Par BenjaminLustrement dans le forum C++/CLI
    Réponses: 6
    Dernier message: 23/06/2006, 16h21
  2. [C++] Probleme de declaration
    Par raboin dans le forum C++
    Réponses: 16
    Dernier message: 22/04/2006, 09h22
  3. [xml et xsd ] probleme de declaration
    Par TabrisLeFol dans le forum Valider
    Réponses: 3
    Dernier message: 02/11/2005, 10h22
  4. Réponses: 11
    Dernier message: 02/05/2005, 19h30
  5. [Traduction] probleme de declaration
    Par Mercilius dans le forum Langage
    Réponses: 3
    Dernier message: 03/04/2003, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo