|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Rémi Cannot Prépa Inscription : septembre 2010 Messages : 16 ![]() |
Bonjour,
J'ai finis un projet d'informatique, la bataille navale, il ne me reste plus qu'à faire une meilleure présentation du jeu. Mon soucis c'est que lorsque je commence à entrer les coordonnées des placements des tirs, un message d'erreur de WINDOWS s'affiche, alors que je le compilateur indique aucun erreur. Voici le code (ne faites pas aux erreurs d'orthographe dans les commentaires ^^) : Code :
|
||
|
|
00
|
|
|
#2 | |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 488 ![]() |
Citation:
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
|
20
|
|
|
#3 |
|
Invité de passage
![]() Rémi Cannot Prépa Inscription : septembre 2010 Messages : 16 ![]() |
bataille.exe a cessé de fonctionné.
Le programme a cessé de fonctionné. Juste ça |
|
|
00
|
|
|
#4 | ||||
|
Expert Confirmé Sénior
![]() ![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 533 ![]() |
Citation:
Un programme qui se compile n'est pas un programme exempt d'erreur. Le compilo te dit juste que ta syntaxe est correcte est que l'édition des liens entre les différents fonctions se fait aussi. En revanche il ne peut pas détecter les erreurs de logique et de gestion mémoire... Exemple de programme qui compile mais qui risque fortement d'avoir lui-aussi un message un jour... Code c :
+1... Citation:
Bon ben commence à mettre des printf() un peu partout, notamment dans la fonction qui semble incriminée (la saisie des navires semble-t-il...)
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
||||
|
|
00
|
|
|
#5 | |
![]() ![]() Inscription : juin 2002 Messages : 2 036 ![]() |
Dans la fonction fTesterFinJeu, les variables x et y ne sont jamais initialisés, tu vas donc lire n'importe où en mémoire (je soupçonne un mélange entre i,j et x,y dans cette fonction).
Mais un compilateur correctement réglé (i.e. avec les warnings activés) l'indique : Citation:
|
|
|
|
10
|
|
|
#6 |
|
Membre émérite
![]() ![]() |
Bonjour,
À force d'utiliser les VLA, tu vas faire exploser ta pile. De plus, quand je tourne ton code sur un débogueur, j'ai des variables qui ne sont pas initialisées. Fais de même, tu verras que ton programme sera plus simple à corriger. Bonne journée.
__________________
Récursivité en C : épidémie ou hérésie ? "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman |
|
00
|
|
|
#7 | ||
|
Expert Confirmé Sénior
![]() |
^Normalement, il n'y a pas de VLAs ici, ou du moins il ne devrait pas y en avoir. Malheureusement je ne sais plus comment les variables constantes connues à la compilation marchent en C99 (par opposition au C++), donc si ça se trouve ce sont des VLAs quand même.
À propos de x et y: La plus grosse erreur est de les utiliser directement après une entrée pour indexer un tableau, sans validation d'aucune sorte: Commence par vérifier qu'ils sont OK: Code C :
__________________
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. |
||
|
|
00
|
|
|
#8 | |
|
Membre émérite
![]() ![]() |
Bonjour,
Citation:
Bonne journée. (*) : Enfin, c'est principalement de la théorie. Il me semble qu'il existe certaines extensions (mais alors ça devient un mix dégueulasse entre C et C++) qui autorisent l'utilisation des const int en tant que taille de tableau, tout en ne supportant que le C89 (c'est le cas de VS2008).
__________________
Récursivité en C : épidémie ou hérésie ? "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman |
|
|
10
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() |
Dans ce cas, la meilleure chose à faire pour être sûr que ce ne soit pas des VLA, c'est remplacer toutes ces variables const par des #define?
__________________
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. |
|
|
00
|
|
|
#10 |
|
Membre émérite
![]() ![]() |
Tout à fait. Simplement, j'aurais tendance à conseiller davantage les énumérations quand il s'agit de constantes numériques (sauf si on veut faire du préprocesseur dessus), mais, dans l'ensemble, c'est effectivement ce que je cherchais implicitement à dire dans mon premier message.
__________________
Récursivité en C : épidémie ou hérésie ? "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman |
|
10
|
|
|
#11 | ||
|
Invité de passage
![]() Rémi Cannot Prépa Inscription : septembre 2010 Messages : 16 ![]() |
Oui j'ai corrigé ça, donc plus de bug, merci.
Mais maintenant j'ai déceler un autre problème, le compteur "ct" de ma fonction suivante ne marche pas, donc si je place seulement un bateau, pas de soucis, le jeu se termine si ce-dernier a été coulé, mais si je passe à 2 bateaux, il me suffit que je coule un bateau pour que le jeu s'arrête, donc sa retourne vrai : Voici le problème : Code :
|
||
|
|
00
|
|
|
#12 | ||
|
Invité de passage
![]() Rémi Cannot Prépa Inscription : septembre 2010 Messages : 16 ![]() |
Ce n'est pas la fonction booléenne qui ne marche pas, car j'ai étudié une autre possibilité de tester le jeu est toujours le même soucis
Voici l'autre possibilité (en commentaire l'ancienne méthode) : Code :
|
||
|
|
00
|
|
|
#13 |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 488 ![]() |
Tu as bien initialisé les variables x et y dans cette fonction, mais tu n'en as pas profité pour regarder à quoi elles servaient !
En fait, elle restent à 0 et cette ligne est plus que suspecte Code :
if (tj[fJoueurSuivant(numjoueur)][x][y]==BATEAU) {
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
10
|
|
|
#14 |
|
Invité de passage
![]() Rémi Cannot Prépa Inscription : septembre 2010 Messages : 16 ![]() |
J'ai mis
Code :
if (tj[fJoueurSuivant(numj)][i][j]==BATEAU) |
|
|
00
|
|
|
#15 |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 488 ![]() |
Code :
jeuPasTermine = fTesterFinJeu(plateau, numjoueur);
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Rémi Cannot Prépa Inscription : septembre 2010 Messages : 16 ![]() |
Si fTesterFinJeu retourne vrai alors jeuPasTermine retourne vrai
|
|
|
00
|
|
|
#17 |
|
Invité de passage
![]() Rémi Cannot Prépa Inscription : septembre 2010 Messages : 16 ![]() |
Ouf' j'ai réussi tout fonctionne !!!
J'ai repris une sauvegarde de ma bataille d'il y a une semaine, et en partant de vos indications (en remplaçant X Y par I J et en initialisant), juste ça ^^ En fait, depuis ce matin je changais mon code à chaque fois en faisant des tests et je devais travailler sur des erreurs ... Merci ! J'ai enfin fini, il ne reste plus qu'à faire la forme. Bonnes fêtes ! , j'aurai peut-être encore besoin de votre aide, j'ai encore un second projet avec un démineur |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com