CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++ / SDL] Problème d'affichage

Chaostixx
Chaostixx
Niveau 2
16 juillet 2007 à 17:32:33

Salut à tous :)

Je me suis lancé avant-hier dans la création d´un petit jeu d´arcade en 2D. J´ai voulu envoyer le programme (qui n´en est qu´à ses balbutiements) à un ami pour qu´il voit à quoi ça ressemble, et bizarrement, quand il lance le .exe, une fenêtre s´ouvre, il y a l´icône du jeu, son titre, mais pas d´image centrale (le menu du jeu).
Inquiet, j´ai envoyé le programme à plusieurs amis, et ils rencontrent tous le même problème : rien ne s´affiche dans la fenêtre alors que chez moi tout fonctionne parfaitement.

Note : J´ai inclus les DLLs nécessaires ainsi que le dossier Images correspondant.

Et il y a autre chose d´encore plus bizarre, en envoyant le programme à ma copine, il lui est arrivé cela :
- Si elle décompresse l´archive, ça ne marche pas
- Si elle ne décompresse pas et lance le .exe, ça marche
- Si elle décompresse tout dans le même dossier "Sprite Club" (le même que chez moi), ça marche. Par contre, un ami a fait la même manipulation et ça n´a pas marché.

Si jamais vous en avez besoin, voilà l´archive :
http://www.megaupload.com/?d=DK3L1RBF

Bon s´il vous plaît ne faites pas attention à la mocheté du code, j´ai été tellement préoccupé par ce problème que j´ai tripatouillé dans tous les sens...

J´espère que vous pourrez m´aider, bonne journée/soirée :)

godrik
godrik
Niveau 30
16 juillet 2007 à 17:40:50

ce qui peut arriver c´est que ton ide ne lance pas l´application du repertoire que tu crois qu´il le lance. Et donc les chemin d´acces ne sont plus bon. Ca m´est arriver plusieurs fois quand j´utilisais visual.

Chaostixx
Chaostixx
Niveau 2
16 juillet 2007 à 17:57:04

Oui mais pourquoi ferait-il ça ?
De plus quand je lance le .exe sans passer par l´IDE, ça marche aussi très bien.

Chaos_Clad
Chaos_Clad
Niveau 10
16 juillet 2007 à 19:02:56

Avec l´aide d´un ami et de fprintf, j´ai pu déterminer que le problème venait de ce morceau de code :

  1. include <string>
  2. include <stdio.h>
  1. include "conversion_string_to_pChar.h"

const char* conversion_string_to_pChar(std::string nomImage)
{
size_t size = nomImage.size() + 1;
char* nomImage_2 = new char[size];
strncpy(nomImage_2, nomImage.c_str(), size);

const char* nomImage_3 = nomImage_2;

delete[] nomImage_2;

fprintf(stderr, "%s", nomImage_3);

return nomImage_3;
}

Désolé pour la mise en page mais les quelques sites que je connaissais pour poster du code source ont disparus :(
Pourquoi ce code fonctionne correctement sur ma machine et plante sur les autres ?
Merci :)

Chaos_Clad
Chaos_Clad
Niveau 10
16 juillet 2007 à 19:04:42

P.S : nomImage_3 s´affiche dans mon stderr, mais pas dans celui de mon pote.

godrik
godrik
Niveau 30
16 juillet 2007 à 19:33:07

il y a rafb.net/paste pour copier/coller son code C/C++

Oula, ca ne m´étonne pas que ca ne marche pas.
Ce qui m´etonne c´est que ca marche chez toi! :)
extrait de man strncpy:
The strncpy() function is similar, except that not more than n bytes of src are copied. Thus, if there is no null byte among the first n bytes of src, the
result will not be null-terminated.

Cela veut dire que nomimage_2 n´est pas null terminated!

deplus:
const char* nomImage_3 = nomImage_2;
delete[] nomImage_2;
Tu as détruit ce qui est pointé par nomImage2. DONC ce que pointe nomImage_3 est détruit de la meme façon! ce pointeur ne devrait pas etre utilisé!

PS: Des outils de vérification de mémoire (valgrind par exemple sous linux) t´aurait permit de détecter cette erreur.

Chaos_Clad
Chaos_Clad
Niveau 10
16 juillet 2007 à 19:45:29

Pour le pointeur j´ai compris mon erreur (bien nulle XD) mais bon j´ai encore un peu de mal à les manipuler ^^
Par contre pour le strncpy j´ai du mal à saisir. :doute:

Chaos_Clad
Chaos_Clad
Niveau 10
16 juillet 2007 à 19:52:00

Enfin je vois que nomImage_2 n´est pas null terminated, mais je comprends pas pourquoi. \0 ne se rajoute pas automatiquement ?
Ca marche si je le concatène ?

godrik
godrik
Niveau 30
16 juillet 2007 à 19:54:22

ca ne le rajoute pas parceque tu dis de copiuer auplus size element, alors que le \0 est le size+1 ieme

Chaos_Clad
Chaos_Clad
Niveau 10
16 juillet 2007 à 20:48:24

Oui mais size contient "nomImage.size() + 1", donc il ne devrait pas y avoir de problèmes non ?
En tout cas j´ai corrigé l´erreur de pointeurs et maintenant ça fonctionne, merci ;)

Fvirtman
Fvirtman
Niveau 10
17 juillet 2007 à 14:06:35

Trace au débuggueur pour voir ce que vaut ta chaine, tout simplement !
Il ne faut pas programmer a l´aveuglette :)

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment