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 :

Access violation sur une string


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2011
    Messages
    88
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o

    Informations forums :
    Inscription : Ao�t 2011
    Messages : 88
    Par d�faut Access violation sur une string
    Bonjour,

    Un probl�me un peu �trange qui vient de m'arriver et dont je n'arrive pas � me d�faire :

    J'ai un objet d'une classe quelconque, avec une string comme attribut.
    Je n'ai pas besoin de remplir cette string tout de suite, je tiens � ce qu'elle reste vide avant de l'initialiser dans une m�thode plus tard.
    Je consid�re, avec raison, que le constructeur de cette string sera appel� correctement et qu'un fois mon objet cr��, son membre string sera lui aussi consid�r� comme correct.

    Seulement voil�, lorsque dans ma premi�re m�thode utilis�e je fais !_str.empty() j'ai le droit a un magnifique crash avec erreur 0xC0000005.

    Et j'ai ce probl�me � chaque ex�cution.
    Comment ceci est-il possible ?

  2. #2
    screetch
    Invit�(e)
    Par d�faut
    poste ton code, sinon on ne peut pas t'aider.
    peut-�tre ton objet a �t� allou� et d�j� desallou�?

    beaucoup de noms commencant par underscore sont reserv�s, il est pr�f�rable de les mettre a la fin.

  3. #3
    Membre confirm�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2011
    Messages
    88
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o

    Informations forums :
    Inscription : Ao�t 2011
    Messages : 88
    Par d�faut
    Une petite rectification, quelque soit la fa�on dont je tente d�acc�der � ma string, �a plante.

    Voici le code simplifi� :
    .hpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    class X
    {
    	void handle_error (const system::error_code & e);
    	private:
    		string _auth_key;
    		bool connected;
    		/* ... */
    };
    .cpp
    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
    void X::handle_error (const system::error_code & e)
    {
    	switch (e.value())
    	{
    		case 10054: // Connexion coupée
    			/* ... */
    		break;
    		case 10061: // Connexion impossible
    			if (!connected && !_auth_key.empty()) // Voilà la ligne responsable du crash
    			{
    				/* ... */
    			}
    			else
    				/* ... */
    		break;
    		default:
    			/* ... */
    	}
    }
    je ne fais vraiment rien de particulier, et comble de l'�tranget�, il y a deux jour ce code marchait parfaitement.

  4. #4
    screetch
    Invit�(e)
    Par d�faut
    a priori je dirai donc que quelqu'un de mal intentionn� (en toute probabilit�, toi-m�me en fait) ecrase de la m�moire quelque part.

    Ce que je ferais donc, si tu as un bon debugger (visual studio) c'est de mettre un breakpoint m�moire; pour cela:
    * mets un breakpoint (normal) dans le constructeur de X
    * lorsque tu vas arriver a ce breakpoint, ajoute un "memory breakpoint"/breakpoint m�emoire sur "&_auth_key"
    * continues l'execution et le programme s'arr�tera de lui m�me a chaque fois que _auth_key est chang�e

  5. #5
    Membre confirm�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2011
    Messages
    88
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o

    Informations forums :
    Inscription : Ao�t 2011
    Messages : 88
    Par d�faut
    Je travaille sous Code::Blocks malheureusement ...

    Autre chose que je viens de tester :

    Si je transforme la ligne comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    if (!connected /*&& !_auth_key.empty()*/) // Voilà la ligne responsable du crash
    Le programme fonctionne sans probl�me !

  6. #6
    screetch
    Invit�(e)
    Par d�faut
    Code::Blocks a aussi des breakpoint m�moire je pense (Data breakpoint), le principe est exactement le m�me-
    bon sinon il y a la m�thode de dichotomie, c'est plus long mais ca marche.
    ca consiste a ajouter le code _auth_key.empty(); partout partout, surtout dans des boucles et les m�thodes appel�es souvent, et voir quel est le premier qui p�te. Tu sauras alors que l'erreur est intervenue entre le dernier _auth_key.empty() qui n'a pas explos� et celui qui vient d'exploser.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me Access Violation dans une classe
    Par randriano dans le forum C++Builder
    R�ponses: 1
    Dernier message: 11/04/2007, 18h49
  2. Access violation sur un new
    Par cedekasme dans le forum C++Builder
    R�ponses: 16
    Dernier message: 23/01/2007, 14h32
  3. binding sur une string
    Par fxp17 dans le forum JSF
    R�ponses: 8
    Dernier message: 08/09/2006, 11h38
  4. [Access] Requête sur une table et tri sur une autre
    Par VooDooS dans le forum Langage SQL
    R�ponses: 2
    Dernier message: 30/08/2006, 15h07
  5. [VB2003][ACCESS] Question sur une requete
    Par Kanie dans le forum Langage SQL
    R�ponses: 3
    Dernier message: 30/03/2006, 17h25

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