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 :

Point d'arrêt déclenché


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 48
    Par défaut Point d'arrêt déclenché
    Bonjour, je codais un petit jeu, me voilà enfin arriver au bout que j'arrive à une erreur que je ne comprends vraiment pas..

    Alors d'abord pour bien comprendre le problème, je vais vous montrer une partie du code que j'ai mit en exécution pas à pas avec des points d'arrêt pour voir jusque où le code s'exécutais avant l'erreur :

    Donc ici je fais appel à la fonction jouerSonAllLevelFinish, le point d'arret avant la fonction fonctionne mais pas celui d'après, j'en conclue donc que l'erreur vient de l'intérieur de la fonction..



    Et voici donc l'intérieur de la fonction avec des points d'arrêt qui vont jusqu'à la fin..



    Le problème c'est que tout les points d'arrêt fonctionnent, on devrai donc sortir de la fonction mais apparemment ce n'est pas le cas vu que le reste du programme ne s’exécute pas.

    Et voici plus exactement les erreurs que j'ai :

    Après un temps d'attente je reçois ça :

    "Mario Sokoban.exe a déclenché un point d'arrêt.", j'ai le choix entre continuer et arrêter, si je fais continuer j'arrive sur ces erreurs consécutive :

    Exception non gérée à 0x77E3E6C3 (ntdll.dll) dans Mario Sokoban.exe*: 0xC0000374: Un segment de mémoire a été endommagé (paramètres*: 0x77E74268).

    et

    Exception non gérée à 0x6812362E (SDL.dll) dans Mario Sokoban.exe*: 0xC0000005*: Violation d'accès lors de la lecture de l'emplacement 0xFEEEFEF6.

    Je suppose donc que ça vient de ces dll, j'ai essayer d'écraser celle de la SDL avec une "neuf" mais ça n'a rien changé. (Je précise que la SDL fonctionne très bien pendant tout le reste du programme)

    Une idée d'où viendrai mon problème? :/

    Merci d'avance ! :/

  2. #2
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    Salut,

    On pourrait supposer que le SDL_FreeSurface ne fonctionne pas correctement. Es-tu sur que le pointeur qui contient ton image imageDeFin n'est pas null ? Il serait bien de le tester ^^

    EDIT : Quand tu dis que tous les points d'arrêt se déclenchent, tu arrives jusqu'à sonAllLevelFinish ou tu parles seulement des point d'arrêt de ta fonction jouerSonAllLevelFinish ?

    Cdlt, deletMe
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 48
    Par défaut
    Bonjour,

    Je viens de tester le code en supprimant la ligne de SDL_FreeSurface(imageDeFin), et ça fonctionne en effet.. Mais je ne comprends quand même pas d'où vient l'erreur vu que mon pointeur n'est pas NULL, il est alloué grâce à la fonction IMG_Load :/

    Ce que je ne comprends pas c'est que je procède de la même manière partout dans mon programme, j'ai pleins de SDL_FreeSurface qui fonctionne et celui y fait son rebelle :/

    Je pourrai laisser le programme tourner ainsi mais alors j'aurai une fuite de mémoire et ce n'est pas très pro ^^

    Edit: J'ai mit le FreeSurface à la fin de ma fonction d'animation et ça fonctionne, je ne vais pas chercher à savoir pourquoi mais mon problème est résolu, merci de ton aide !

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Tu devrais surtout avoir un controle d'erreur.
    Parviens-tu à l'afficher, cette imageDeFin?

  5. #5
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    Non ne surtout pas le laisser comme ça lol ça serait dommage si prêt du but.

    Quand tu dis que ton pointeur n'est pas nul, tu le testes ou tu le supposes simplement parce que tu appelles la fonction SDL_FreeSurface ? Tu peux également vérifier que l'image que tu charges existe, ou que tu n'a pas fait d'erreur dans son nom.

    Je vois que tu utilises également cette surface (imageDeFin) dans la fonction animationJeuFini. Peut être que tu déférences dans cette fonction ?
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 48
    Par défaut
    (Merci à vous 2 mais j'ai édité mon message pour vous dire que le sujet est résolu ^^ )

  7. #7
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    je ne vais pas chercher à savoir pourquoi mais mon problème est résolu
    A ta place j'aimerai savoir d'où vient l'erreur, c'est quand même instructif non ?
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 401
    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 401
    Par défaut
    0xFEEEFEEE est la valeur magique utilisée par la version Debug de la C Run Time Library de Microsoft pour marquer de la mémoire récemment libérée.

    L'adresse à laquelle du accèdes par erreur est située 8 octets au-dessus, c'est donc probablement le troisième membre d'une structure dont le pointeur serait dans cette mémoire:
    Code C : 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
    struct abc { int a, b, c };
     
    struct toto { struct abc* pAbc; };
     
    int main(void)
    {
    	int c2;
    	struct toto * pToto = malloc(sizeof *pToto);
    	pToto->pAbc = malloc(sizeof(struct abc));
    	pToto->pAbc->a = 1;
    	pToto->pAbc->b = 2;
    	pToto->pAbc->c = 3;
    	free(pToto); /*En Debug, cette ligne remplit la mémoire pointée de 0xFEEEFEEE*/
    	printf("pToto->pAbc: %p\n", (void*)pToto->pAbc); /*Affichera probablement feeefeee*/
    	c2 = pToto->pAbc->c; /*BOUM!*/
    	return 0;
    }
    Ce code, en Debug, devrait reproduire la même erreur.
    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.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 48
    Par défaut
    A ta place j'aimerai savoir d'où vient l'erreur, c'est quand même instructif non ?
    J'avoue que ce n'est pas dans mes habitudes, je suis plutôt du genre à vouloir comprendre ce que je code, mais ici il ne me restait qu'à régler cette erreur pour avoir fini mon programme et j'avoue avoir eu un coup de flemme, merci de m'avoir rappelé à l'ordre

    Et merci Médinoc pour ton explication, je comprends déjà un peu mieux en faite

  10. #10
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    Merci pour cette démonstration très explicite Médinoc
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/07/2010, 15h04
  2. [Plugi][phpeclipse] point d'arrêt pas pris en compte
    Par damjal dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 23/11/2005, 00h58
  3. Point d'arrêt dans le programme
    Par jmde dans le forum Access
    Réponses: 9
    Dernier message: 20/10/2005, 22h06
  4. [vb.NET][xmlTextReader] influence d'1 point d'arrêt
    Par Rom_1 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/07/2005, 12h06
  5. possible de sauvegarder ses points d'arrêts ?
    Par Merfolk dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/09/2004, 12h23

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