Bonjour,
J'ai besoin d'un coup de main pour actualiser la lib tiled sur CatchChallenger (open source, creer en 2011, on est a la 3eme version), je manque de temps, j'ai viré la lib tiled embeded de 2011 et je link sur la de debian 12, je pense avoir bien corrigé tout les problèmes de compilation, mais:
- https://github.com/alphaonex86/CatchChallenger/blob/master/tools/map2png/map2png.cpp#L823 l'activation de ces lignes fait un crash (et actuellement les bots ne sont pas sur le nouveau layer généré donc au mauvais niveau)
- https://github.com/alphaonex86/CatchChallenger/blob/master/client/qtopengl/catchchallenger-qtopengl.pro le client principal ne centre plus la vu sur le joueur (et il y as peu être d'autre bug graphique lié a tiled)
Si quelqu'un se motive ca aiderai fortement le projet un coup de main sur la partie tiled
Il y as eu pas mal d'avancé ces dernières années, je ferai peu être une news compléte. Modularisation et API, nettoyage, …
# manque de précision
Posté par fearan . Évalué à 4. Dernière modification le 01 mars 2024 à 13:14.
-> l'activation de ces lignes fait un crash
sans message c'est pas clair, segmentation fault ? une exception qui est lancée et non gérée ? un dépassement de pile ? Ça crash au niveau de ces lignes ? Ça crache plus loin?
que dit valgrind sur le code ? (oui c'est lent)
je remarque par ailleurs que l'objet est initialisé à NULL dans le constructeur, mais comparé setté et comparé nullptr, ça ne devrait pas avoir d'impact, mais faudrait changer ça.
Et que dit une compilation avec -Wall, souvent ça donne de belle pistes.
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: manque de précision
Posté par fearan . Évalué à 4.
J'ajouterai que y'a des potentialité de fuite la ligne 854 fait un return sans avoir libéré l'objet temporaire, et de ce que je lis de la ligne commenté du dessus ne doit pas avoir de destructeur décent
Utiliser un scope_ptr ou uniq_ptr me semble bien plus adapté; quitte à le release au moment de l'affecter au tableau; ça simplifie la gestion des erreurs
Porter tout ce code en C++11 risque d'être compliqué, mais le faire pour les partie qui plantent me semblent pas une mauvaise idée.
la encore j'ai une fuite potentielle :
le pointeur est perdu
sauf si Map2Png::layerChangeLevelAndTagsChange(tempMapObjectFull,hideTheDoors);
prend la possession du pointeur, mais sémantiquement y'a rien qui l'indique et à première vue, ce n'est pas le cas.
je remarque aussi que Map2Png::~Map2Png() est intégralement commenté, si y'a des soucis lors des delete, c'est pas les commenter qui va corriger le problème, ça veut dire
1) qu'on accède a des donnée qui ont déjà été détruite (dans le destructeur, double free)
2) qu'on accède a des données qui ont déjà été détruite (après le passage du destructeur problème d'ownership)
dans le vieux code 1 new -> (au moins 1) delete, si ce n'est pas le cas donner un commentaire pour l'expliquer.
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: manque de précision
Posté par alpha_one_x86 (site web personnel) . Évalué à 2. Dernière modification le 02 mars 2024 à 13:56.
Ne maîtrisant pas scope_ptr ou uniq_ptr j'ai préféré évité utiliser pour ne pas mal l'utiliser.
Le code devrai pouvoir être compiler en --std=c++17, mais j'ai pas changer le code pour rester compatible avec les compilateurs c++11 (MIPS oblige).
La lib tiled prennais pas mal possession des pointeurs, et perdre quelque pointeur (memleak) dans ce code n'as pas d'importance (génération de preview et fermeture du processus).
Map2Png::~Map2Png() -> commenter car tiled delete lui même et cela fesais un double free.
Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/
[^] # Re: manque de précision
Posté par fearan . Évalué à 4.
et
C'est tout le problème les scoped et uniq servent justement :
1) a expliciter la porté d'un pointeur et qui le possède
2) gérer la libération (delete) des pointeurs.
Dans le code j'ai vu pas mal de delete commenté, au moins un autre oublié, des destructeurs d'objets contenant des pointeurs null sans destructeurs.
si la lib prends l'ownership des pointeurs c'est à elle de gérer la libération; mais une fuite mémoire n'est en aucun cas 'sans importance' dans un projet perenne. ça complique la compréhension.
pour que valgrind donne des information plus pertinentes, il faut compiler avec -g
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: manque de précision
Posté par alpha_one_x86 (site web personnel) . Évalué à 2. Dernière modification le 03 mars 2024 à 01:24.
Hélas je n'ai plus de temps d'apprendre.
Le projet est déjà compiler avec -g mais pas le système.
Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/
[^] # Re: manque de précision
Posté par alpha_one_x86 (site web personnel) . Évalué à 2. Dernière modification le 02 mars 2024 à 13:47.
SEGFAULT, objGrou->removeObject(objects.at(index2));
Valgrind ne me donne pas d'info utile:
host stacktrace:
==1310747== at 0x580429AA: show_sched_status_wrk (m_libcassert.c:406)
==1310747== by 0x58042AC7: report_and_quit (m_libcassert.c:477)
==1310747== by 0x58042C57: vgPlain_assert_fail (m_libcassert.c:543)
==1310747== by 0x5804C708: get_bszB_as_is (m_mallocfree.c:303)
==1310747== by 0x5804C708: is_inuse_block (m_mallocfree.c:331)
==1310747== by 0x5804C708: vgPlain_describe_arena_addr (m_mallocfree.c:1604)
==1310747== by 0x5803B31A: vgPlain_describe_addr (m_addrinfo.c:185)
==1310747== by 0x58039A1E: vgMemCheck_update_Error_extra (mc_errors.c:1185)
==1310747== by 0x5803E1F5: vgPlain_maybe_record_error (m_errormgr.c:822)
==1310747== by 0x58038CF8: vgMemCheck_record_address_error (mc_errors.c:765)
==1310747== by 0x5800F063: mc_LOADVn_slow (mc_main.c:1557)
==1310747== by 0x1004A3B1D4: ???
==1310747== by 0x10038C6F2F: ???
==1310747== by 0x10038C6F17: ???
==1310747== by 0x10038C6F2F: ???
==1310747== by 0x1C0F: ???
==1310747== by 0x100200833F: ???
Wall -> rien, tout est clean en Warning, NULL<>nullptr aucun changement…
Mon projet libre: http://ultracopier-fr.first-world.info/, mon jeu libre: http://catchchallenger.first-world.info/
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.