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 :

Exception de première chance


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Par défaut Exception de première chance
    Bonjour,

    Voila, j'ai un problème qui me dérange depuis quelque temps, et je n'ai toujours pas trouvé de réponses.
    Je vous explique :
    Le code de l'erreur est :

    Exception de première chance à 0x00404238 dans USBtest.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x0130fff8.
    Exception non gérée à 0x00404238 dans USBtest.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x0130fff8.
    Le thread 'Thread Win32' (0x25d8) s'est arrêté avec le code 0 (0x0).
    Le programme '[5368] USBtest.exe: Natif' s'est arrêté avec le code -1073741819 (0xc0000005).

    Cette erreur apparaît à la ligne suivante :
    ch = char(FT_In_Buffer[ii]);

    "ch" étant définit comme un char, "ii" comme un DWORD, et FT_In_Buffer de la façon suivante :
    char* FT_In_Buffer=(char*)malloc(sizeof(char));

    Après mes différentes recherches sur le net, j'ai trouvé qu'il fallait s'intéresser à la valeur de "This". Lors de ma compilation et à l'apparition de l'erreur elle est égale à 0x0012fca4. Je n'ai pas trouvé ce que cela pourrait dire par contre.

    Donc voila, si quelqu'un a une idée d'où pourrait venir cette erreur je suis preneur. En espérant vous avoir donné les informations nécessaires bien entendu.

    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    Je dirais que tu va peut etre jardiner un peu loin dans ton tableau

    ajoute un test pour vérifier ca...
    du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int taille_tab= sizeof(FT_In_Buffer)/sizeof(char);
    if(ii<taille_tab)
    {
       traitement
    }
    else
    {
       jardinage! ca va trop loin! :yaisse2:
    }

  3. #3
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    A première vue ton problème se situe dans l'allocation de FT_In_Buffer.
    En c++ il est préférable d'utiliser les std::string au lieu des char * (mais bon ça passe quand même). Par contre il est fortement recommandé d'utiliser new pour l'allocation dynamique.
    Ton allocation devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* FT_In_Buffer= new char [taille_de_ton_buffer];
    edit:
    oublie pas de remplacer ton free par un delete

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Par défaut
    Merci Befalimpertinent, j'ai bien déclaré la variable comme tu l'as marqué.

    Cepandant le problème est toujours présent et de même nature.

    Je précise que je suis sous Visual C++, mais je ne sais pas si ça a une incidence sur l'erreur que j'obtiens.

  5. #5
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    Si tu es sous Visual places un point d'arret au niveau de la ligne qui pose problème et éxécutes le code pas à pas au debugger.

    Tu te rendras comptes par toi même que ton ii >= taille_de_ton_buffer si c'est bien ça le problème.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Par défaut
    Voila, après exécution point par point, j'ai bien remarqué que ii était supérieur à la taille de mon buffer.
    J'ai initialisé cette taille à 1000, et la valeur de ii est égale, au niveau du point d'arrêt que j'ai créé, à 3435973836, c'est à dire 0xCCCCCCCC.
    En allant farfouiller un peu j'ai trouvé que cela voudrait signifier :
    "mémoire locale (pile /stack ) non initialisée par exemple un pointeur déclaré dans une fonction membre d'une classe."
    Cependant j'ai bien initialisé le pointeur à la valeur NULL, donc je ne vois pas trop ce que je pourrai changer.
    Et je ne crois pas avoir souvenir de savoir comment initialiser une mémoire locale.

    Si quelqu'un pouvait m'expliquer?

    Merci.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    "ii"? ton index?

    tu la déclares comment?

    Il faut que tu l'initialises avec une valeur ( genre "0").

    Ce n'est pas un objet, il faut l'initialiser explicitement.

    "NULL" est utilisé pour les pointeurs.

    Et si ii est un pointeur.. ben euh.. pourquoi? mais il faut pas que tu l'initialises à NULL, il faut que tu l'alloues ( avec new en C++, malloc en C ) et que tu initialises sa valeur.

    Sinon en C++ il y a tout un set d'objets qui simplifient le travail avec les tableaux et les chaînes dynamiques ( std::vector, std::string etc.. )

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, 20h22
  2. Masquer Exception de première chance
    Par Ange44 dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 04/10/2010, 13h09
  3. [Soucis]Exception de première chance (VC++)
    Par Kin0u dans le forum C++
    Réponses: 5
    Dernier message: 31/08/2009, 09h31
  4. Exception de première chance
    Par MohEllayali dans le forum C++
    Réponses: 2
    Dernier message: 04/03/2009, 11h29
  5. Exception de première chance
    Par oodini dans le forum C++
    Réponses: 10
    Dernier message: 25/09/2007, 16h09

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