Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Erreur en C bizarre
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Erreur en C bizarre

Posté le 30/10/2014 23:25

Salut j'ai (encore) un prbm avec le C sauf que la ca me saoule !!!
voici le code : http://pastebin.com/z2naxsp7 (allégé) et l'erreur est ici : alors que ceci (afficher le meilleur score) marche très bien dans jeu(), ici CA NE VEUT PAS : je m'explique ca veut avec les minutes et les secondes mais dès qu'il s'agit de parler de centieme de secondes la ya plus personne ! ca m'affiche soit 0 soit 1... et quand à la fin je regarde dans local variable (sur le SDK), je retrouve parfois record avec une valeur de -1,#QNAN (je ne délire pas c'est vraiment ce qu'il y a marqué omg )...
recording[28] est un int, PrintVariable est une fonction permettant d'afficher un int à telle coordonnées de la couleur qu'on veut.
Merci de votre aide mais moi la, après avoir passé 1h30 dessu je sature


Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 03/02/2015 12:19 | #


IsKeyDown n'est pas compatible sh, peut être ça le problème
Lephenixnoir Hors ligne Administrateur Points: 21343 Défis: 149 Message

Citer : Posté le 03/02/2015 13:13 | #


Ça vient du code, c'est certain. Une bêtise qui devait passer avant par chance je suppose....
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 03/02/2015 17:18 | #


Alors la je suis pas sur il semblerai que ca soit une erreur de IsKeyDown car : le code
if(carre_x<=36 && carre_y<=26 || carre_x>=88 && carre_y<=26 || carre_x>=85 && carre_y>=29 || carre_x<=36 && carre_y>=29){//si on va dans un menu
            i=0;
            while(IsKeyDown(KEY_CTRL_UP) || IsKeyDown(KEY_CTRL_RIGHT) || IsKeyDown(KEY_CTRL_DOWN) || IsKeyDown(KEY_CTRL_LEFT)){     //tant qu'on appuie sur une fleche de direction
            //>>>>>>>>>>>>>LA PRBM !!!! Rajouter une conditino pour que la boucle au dessus ne dépasse pas les n tours<<<<<<<<<<<<
                i++;
                if(i==1000) break;
            }
}

ca entre apperement bien dans la condition mais a partir du while ca marche plus : pour etre sur j'ai rajouté une auto-incrémentation de i et ca ne casse pas la boucle lors du bug !!! Cela continue and on and on... Après ce bug ne semble pas etre présent sur l'émulateur je vais vérifier si ca vient de ma calto car je suis censé avoir une compatible SH3-SH4 et je n'ai jamais eu de prbm, meme sur l'ancienne version de mon jeu
Donc je vais tester ca plus tard et en passant petit bonjour de mon cours de SES
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21343 Défis: 149 Message

Citer : Posté le 03/02/2015 20:33 | #


Fais un truc plus propre quand même.
while(IsKeyDown(KEY_CTRL_UP) || IsKeyDown(KEY_CTRL_RIGHT) || IsKeyDown(KEY_CTRL_DOWN) || IsKeyDown(KEY_CTRL_LEFT) && i < 1000)

Sinon, ça m'étonnerait que ça vienne de là... regarde le programme en plus général...
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 03/02/2015 22:26 | #


Oui je pense avoir une piste je pense que cest cause par le fait que j'appelle la fonction jeu(...) avec un tablrau et lui recupere le tableau. Peut être que au bout dun moment ca pete un cable au niveau de la memoire d'ailleurs en parlant de ca : jinitialise mon tableau avec un pointeur et a la fin dois je le libérer ? Je sais que javais deja evoque la question du free() mais je ne garde aucun souvenir
int *recording[]=NULL
(je sais plus vraiment commebt c ecrit mais cest le principe
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21343 Défis: 149 Message

Citer : Posté le 03/02/2015 22:31 | #


Alors... pour initialiser un pointeur de type int :
int *recording = NULL;


Si tu fais :
int *recording[] = NULL;

Ça ne veut rien dire parce que tu initialises un tableau de pointeurs, et que « NULL » ne peut représenter qu'un seul de ces pointeurs... donc c'est ambigu...

Mais retiens au moins ça :
Chaque appel à malloc() et affiliés doit nécessairement se terminer par un et un seul appel à free().

Par exemple :
int *ptr = calloc(10,sizeof(int));
free(ptr);
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 03/02/2015 22:50 | #


Ok ca va alors je m'étais juste trompé en écrivant : j'ai ca en vrai
int *recording = NULL


Ajouté le 03/02/2015 à 23:18 :
Alors la bizarre !!! j'ai juste rajouté deux lignes (en rouge ) pour vérifier que ca bloque après le while(...):
if(carre_x<=36 && carre_y<=26 || carre_x>=88 && carre_y<=26 || carre_x>=85 && carre_y>=29 || carre_x<=36 && carre_y>=29){//si on va dans un menu
            i=0;
            while(IsKeyDown(KEY_CTRL_UP) || IsKeyDown(KEY_CTRL_RIGHT) || IsKeyDown(KEY_CTRL_DOWN) || IsKeyDown(KEY_CTRL_LEFT)){     //tant qu'on appuie sur une fleche de direction
            //>>>>>>>>>>>>>LA PRBM !!!! Rajouter une condition pour que la boucle au dessus ne dépasse pas les n tours<<<<<<<<<<<<
                i++;
                if(i==1000) break;
            }
            [red]PrintMini(25, 30, "ERREUR", 1);
            ML_display_vram();[/red]
            if(carre_x>=88 && carre_y<=26)  jeu(recording, deverouillage);
        }

et la c'est la fête à la patate !!! Avec ces deux lignes, le compilo m'affiche ERREUR mais s'arrete la alors que si je les enleve, ca marche très bien omg !!!!!!!!!
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 03/02/2015 23:18 | #


Même chose avec MonochromeLib, vérifie que tu as la version compatible SH4.
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 03/02/2015 23:30 | #


alors j'ai changé un bout de code pour rendre le ML compatible SH4 et j'ai mis un bout de code pour que je jeu soit nativement compatible SH4 MAIS ca affiche toujours erreur et rien de plus...
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 03/02/2015 23:32 | #


QUoi comme erreur? Si c'est TLB Erreur, essaye de supprimer le dossier Debug, de refaire une compilation et dis-nous si ça marche.
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 03/02/2015 23:34 | #


Ah non ca m'affiche le erreur de :
PrintMini(25, 30, "ERREUR", 1);
            ML_display_vram();


Ajouté le 03/02/2015 à 23:53 :
Ok il me semble avoir résolu le problème en fait je pense que c'était un prbm de pointeurs : au bout d'un moment le pointeur sur recording semblait etre "périmé" et du coup je fais un recording=memory_load(filepath blablabla) juste avant d'appeler jeu(int *recording, int*deverouillage){} et ca semble marcher (j'ai fait 15 fois menu->jouer->menu->jouer... et ca a rien fait 8) )
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Dark storm Hors ligne Labélisateur Points: 11549 Défis: 176 Message

Citer : Posté le 04/02/2015 00:01 | #


Je sens qu'il va falloir faire une refonte du système de réponse aux problèmes : créer un topic à chaque fois, c'est pas cool... Mais d'un autre coté fouiller dans 60 pages de commentaires ça ne l'est pas non plus

A votre niveau, 99% des erreurs qui n'arrivent pas à la compilation viennent des pointeurs... Sinon c'est les EBR.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 21343 Défis: 149 Message

Citer : Posté le 04/02/2015 13:14 | #


C'est très moche ta résolution Darkysun... tu rajoutes un patch au lieu de virer le problème. Si tu codes trop longtemps comme ça ça va devenir ingérable !
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 04/02/2015 15:15 | #


Bah c'est la seule solution que j'ai trouvée et tkt j'ai presque fini le jeu il me reste les credits et 2-3 trucs
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !





LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 31 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd