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 :

[Soucis]Exception de première chance (VC++)


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Par défaut [Résolus]Exception de première chance (VC++)
    Bonjour, bonjour

    Je vous expose mon soucis :

    Je doit développer un launcher console pour une application. ce launcher lira les parametre a recupérer dans un csv pour les envoyé a un serveur. Parmis les information du CSV il y a 2 adresse ip. ces adresse serve a definir une CStringlist qui contiendra toute les ip a envoyé.


    Mon soucis est au niveaux de cette méthode :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    BOOL CSelectHostsDlg::AddNetwork(BYTE nIpFromA, BYTE nIpFromB, BYTE nIpFromC, BYTE nIpFromD, BYTE nIpToA, BYTE nIpToB, BYTE nIpToC, BYTE nIpToD)
    {
     
    	try
    	{
    		BYTE	n;
    		CString csAddress;
     
    		if (nIpFromA == nIpToA)
    		{
    			// Address range is inside a single class A network
    			if (nIpFromB == nIpToB)
    			{
    				// Address range is inside a single class B network
    				if (nIpFromC == nIpToC)
    				{
    					// Address range is inside a single class C network
    					for (n=nIpFromD; n<=nIpToD; n++)
    					{
     
    						csAddress.Format( _T( "%u.%u.%u.%u"), nIpFromA, nIpFromB, nIpFromC, n);
     
     
    						m_pComputerList->AddTail(csAddress);
     
    					}
    					return TRUE;
    				}
    				// Address range is over mulitple class C networks
    				for (n=nIpFromC; n<=nIpToC; n++)
    				{
    					if (n==nIpFromC)
    					{
    						// First class C, add only from first specified address
    						if (!AddNetwork( nIpFromA, nIpFromB, n, nIpFromD, nIpFromA, nIpFromB, n, MAX_IP_RANGE))
    							return FALSE;
    					}
    					else
    					{
    						if (n==nIpToC)
    						{
    							// Last class C, add only to last specified address
    							if (!AddNetwork( nIpFromA, nIpFromB, n, 0, nIpFromA, nIpFromB, n, nIpToD))
    								return FALSE;
    						}
    						else
    						{
    							// Full class C
    							if (!AddNetwork( nIpFromA, nIpFromB, n, 0, nIpFromA, nIpFromB, n, MAX_IP_RANGE))
    								return FALSE;
    						}
    					}
    				}
    				return TRUE;
    			}
    			// Address range is over mulitple class B networks
    			for (n=nIpFromB; n<=nIpToB; n++)
    			{
    				if (n==nIpFromB)
    				{
    					// First class B, add only from first specified address
    					if (!AddNetwork( nIpFromA, n, nIpFromC, nIpFromD, nIpFromA, n, MAX_IP_RANGE, MAX_IP_RANGE))
    						return FALSE;
    				}
    				else
    				{
    					if (n==nIpToB)
    					{
    						// Last class B, add only to last specified address
    						if (!AddNetwork( nIpFromA, n, 0, 0, nIpFromA, n, nIpToC, nIpToD))
    							return FALSE;
    					}
    					else
    					{
    						// Full class B
    						if (!AddNetwork( nIpFromA, n, 0, 0, nIpFromA, n, MAX_IP_RANGE, MAX_IP_RANGE))
    							return FALSE;
    					}
    				}
    			}
    			return TRUE;
    		}
    		// Address range is over mulitple class A networks
    		for (n=nIpFromA; n<=nIpToA; n++)
    		{
    			if (n==nIpFromA)
    			{
    				// First class A, add only from first specified address
    				if (!AddNetwork( n, nIpFromB, nIpFromC, nIpFromD, n, MAX_IP_RANGE, MAX_IP_RANGE, MAX_IP_RANGE))
    					return FALSE;
    			}
    			else
    			{
    				if (n==nIpToA)
    				{
    					// Last class A, add only to last specified address
    					if (!AddNetwork( n, 0, 0, 0, n, nIpToB, nIpToC, nIpToD))
    						return FALSE;
    				}
    				else
    				{
    					// Full class A
    					if (!AddNetwork( n, 0, 0, 0, n, MAX_IP_RANGE, MAX_IP_RANGE, MAX_IP_RANGE))
    						return FALSE;
    				}
    			}
    		}
    		return TRUE;
    	}
    	catch( CException *pEx)
    	{
    		pEx->ReportError( MB_OK|MB_ICONSTOP);
    		pEx->Delete();
    		return FALSE;
    	}
    }
    Voici son appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	BYTE  nIpFromA, nIpFromB, nIpFromC, nIpFromD, nIpToA, nIpToB, nIpToC, nIpToD;
    				nIpFromA = (unsigned char)ipfromA;
    				nIpFromB = (unsigned char)ipfromB;
    				nIpFromC = (unsigned char)ipfromC;
    				nIpFromD = (unsigned char)ipfromD;
    				nIpToA = (unsigned char)iptoA;
    				nIpToB = (unsigned char)iptoB;
    				nIpToC = (unsigned char)iptoC;
    				nIpToD = (unsigned char)iptoD;
     
     
     
    					host.AddNetwork(nIpFromA, nIpFromB, nIpFromC, nIpFromD, nIpToA, nIpToB, nIpToC, nIpToD);
    sachant que c'est une fonction déja utilisé par l'ancienne application.

    et j'obtient ceci comme erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception non gérée à 0x787b9f88 (mfc90d.dll) dans xxx.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xcccccccc.
    je doit avoué que je suis mis sur le carreaux par visual C++....

    Merci d'avance pour l'aide ou les indications que vous pourriez me fournir.

    Mathieu.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 385
    Par défaut
    Traduction: Tu as une violation d'accès (Exception 0xC0000005, l'équivalent des segfault de *n*x) parce que tu tentes de lire un pointeur invalide. La valeur "magique" 0xCCCCCCCC suggère qu'il s'agit d'un pointeur non-initialisé en variable locale (ou en variable membre d'une classe, dont l'instance serait une variable locale).

    De plus, il y a un outil très sympa dans le debugger de Visual Studio, c'est la fenêtre "Call Stack" (pile d'appels) qui permet d'aider à mieux répérer où le code plante.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 755
    Billets dans le blog
    3
    Par défaut
    Prends le temps de lire cet article :
    http://loulou.developpez.com/tutorie...visual-studio/

    ça te fera gagner beaucoup de temps.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Par défaut
    Merci pour vaut reponse, voici le résultat .

    Dans ma classe j'ai un attribut CStringList*.

    Il semblerais que lors de la construction la list ne soit pas initialisé (ha bon ?)

    Alors pour verifié que le soucis vient bien de la, j'ai rajouté ce petit bout de code au début de mon main : *

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        CStringList* test_csl;
                    CString coucou;
                    test_csl->AddTail(coucou);
    et la surprise également une erreur car la liste ne serait pas initialisé.

    Seulement comment dis précédemment les Type de variable tel que CString ou BYTE me sont complètement étrangère.
    Mon problème serait donc de savoir comment initialisé un CStringList ?

    es ce que quelqu'un aurait une piste ? (je continue mes recherches)


    d'avance Merci

    Cordialement
    Mathieu.

  5. #5
    Membre éclairé Avatar de cynique
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Par défaut
    Citation Envoyé par Kin0u Voir le message
    Merci pour vaut reponse, voici le résultat .

    Dans ma classe j'ai un attribut CStringList*.

    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        CStringList* test_csl;
                    CString coucou;
                    test_csl->AddTail(coucou);
    et la surprise également une erreur car la liste ne serait pas initialisé.
    Mais non. Tu n'as pas une liste. Tu as un pointeur vers une liste.

    Tu peux faire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      CStringList* test_csl;
      CString coucou;
     
      test_csl = new CStringList; // On initialise le pointeur
     
      test_csl->AddTail(coucou);
     
    ...
     
      delete test_ccl; // Nettoyage à la main.
    ou comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      CStringList test_csl; // Pas d'étoile: une liste
      CString coucou;
     
      test_csl.AddTail(coucou); // Ici, un point au lieu d'une flèche
     
      // Nettoyage automatique

  6. #6
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Par défaut
    Merci beaucoup mon soucis venait de la !

    merci pour votre temps que vous consacrez pour aider les gens.

    Bonne journée !


    Mathieu.

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

Discussions similaires

  1. Exception de première chance : stack overflow
    Par Far_Away dans le forum C++
    Réponses: 9
    Dernier message: 02/02/2011, 21h22
  2. Masquer Exception de première chance
    Par Ange44 dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 04/10/2010, 14h09
  3. Exception de première chance
    Par MohEllayali dans le forum C++
    Réponses: 2
    Dernier message: 04/03/2009, 12h29
  4. Exception de première chance
    Par Oh-Dae-Su dans le forum C++
    Réponses: 6
    Dernier message: 15/05/2008, 15h17
  5. Exception de première chance
    Par oodini dans le forum C++
    Réponses: 10
    Dernier message: 25/09/2007, 17h09

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