je suis en train de travailler avec le tuto de Once pour la création d'un moteur de particule. (le tuto en question)
je travaille donc avec OpenGl j'utilise SDL le tout avec CodeBlock.
j'ai reussis dans un premier temps sans trop de soucis en suivant le tuto, puis j'ai essayer d'apporter mes propres modification. Actuellement j'essaie de refaire ce moteur en utilisant des classes.
Je suis partis dans l'idée de créer deux class, PartEngine et Particule. Le premier gérant donc un tableau du deuxieme.
et c'est là que j'ai un problème
j'ai reussis a creer les classes sans que le compilateur plante
si je fais une instance de PartEngine qui gere 500 particule ca fonctionne d'ailleur.
mais lorsque je quitte le programme j'ai l'erreur suivante:
avec 1000 particules le programme se ferme immédiatement et le build log m'indique: process terminated with status 1.
en cherchant un peu il semble que cela vienne d'un probleme d'allocation de mémoire, mais je n'arrive pas à mettre le doigts dessus.
si quelqu'un voit où se trouve l'erreur, d'avance merci.
PS: voici le code de mes classes avec les constructeurs, j'en mettrait plus si necessaire.
class Particle
{
private:
bool active; // Active (1=Oui/0=Non)
double life; // Durée de vie
double fade; // Vitesse de disparition
float r, g, b; // Valeurs RGB pour la couleur
double x, y, z; // Position
double xi, yi, zi; // Vecteur de déplacement
double xg, yg, zg; // Gravité
public:
//créateur
Particle::Particle();
les autres methode ne sont que des setteurs et accesseurs.
sebajuste, Pour le destructeur effectivement je ne l'ai pas mis mais tu viens de le faire a ma place
en ce qui conscerne le debugger je crains que ce ne soit ma grosse faiblesse de programmeur, je sais pas trop comment l'utiliser. (au passage si vous avez des sites/tuto interessant sur le sujet, je suis preneur)
Malgré tout j'ai fait un essais et il m'indique soit
No symbol "PartEngine" in current context.
Previous frame inner to this frame (corrupt stack?)
avec 500 particules
soit:
Program received signal (SIGSEGV)
Segmentation fault
No symbol "PartEngine" in current context.
avec 1000 particules
ce sont ces messages qui me font dire dans mon premier post
Citation : premier post
en cherchant un peu il semble que cela vienne d'un probleme d'allocation de mémoire, mais je n'arrive pas à mettre le doigts dessus.
mais justement je n'arrive pas a utiliser le debugger pour aller plus loin dans mes investigations.
Programmer sans debuggueur, c'est se handicaper gravement. Il est important que tu apprennes a t'en servir ! tu ne pourras pas etrenellement programmer a l'aveuglette !
C'est un peu comme si tu te traçais un parcours d'obstacle, en essayant de prendre toutes tes précautions, et qu'ensuite, tu te disais "allez, je l'essaie ce parcours", et que tu te bandais les yeux et que tu mettais a courir.... Au moment ou tu vas faire "Aïe..." ça voudra dire que ton parcours d'obstacle n'était pas parfait... Mais avec les yeux bandés, tu ne sauras meme pas ou tu es...
J'en suis parfaitement conscient et je cherche depuis longtemps des infos sur celui de codeblocks, (je viens de trouver un tuto j'espere que ca m'apportera quelque chose)
toutefois en attendant j'essaye de faire comme je peut.
Lorsque j'utilise la commande debug de codeblocks j'obtiens une fenetre back-trace qui s'arrete regulierement a une ligne en citant ma fonction d'affichage. cette fonction fais nottament appel a la methode dessinerParticules de PartEngine.
De ce fait je me suis rendu compte que le programme tourne sans probleme lorsque je met cet appel en commentaire, mais je n'ai aucune particule a l'ecran du coup
en gros cette methode est un copier coller de celle utilisée par Once dans son tuto, si besoin je la posterais.
hop je m'autorise un petit up car mon probleme a evolué.
J'ai enfin réussis a me servir du debugger de code block, mais je ne suis pas sur d'avoir réellement isolé le pb. j'ai remarque par contre que les valeurs de mes particules devenait démesurée (genre 2.234E+303) au bout de quelques tours de boucle et le programme fini par planté sur une erreur de memoire inaccessible.
par contre j'ai remarqué qu'en définissant mon objet moteur de particule en global dans le programme, il n'y avait plus aucun probleme, meme avec un grand nombre de particule.
Je me demande du coup si je n'ai pas un soucis dans le passage d'objet en parametre, en effet je le fait de la facon suivante:
...
class objet;
fonction(objet);
...
void fonction(class objet)
{
}
j'ai voulu essayé de passer un pointeur mais ca ne passe pas.
quelqu'un aurait une methode pour le passage d'objet en parametre?
merci, tu confirme ce que je pensais, mais je ne trouvais pas la synthaxe pour obtenir ce résultat. Je vais tester ca et le graver dans un coin
edit: Oki ca marche maintenant!
petit details, j'ai du faire fonction(class &objet) sinon le compilateur bloquait
Pour conclure le probleme semblait venir de la multiplication de tableau (je le passait deux fois dans des fonctions par valeurs). 3 tableaux de 1000 objets ayant chacun un certain nombres s'attribut, ca doit pas etre facile a gerer en memoire.
[SDL+OpenGL]tableau d'objet en attribut
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html