Pages: 1
Petit post pour discuter de ton soucis Ramis de segmentation.
Tout d'abord, j'ai constaté un petit soucis dans ton code:
ISceneNode* balle[mp5.getMunitions()];
Le compilateur (VC++) me dit et à juste titre expression constante attendue
Logique, tu ne peux pas créer de façon dynamique un tableau dans ton code, du moins pas comme cela.
Par contre tu peux écrire un truc du genre
ISceneNode** balle; *balle = new ISceneNode[mp5.getMunitions()];
par contre, ISceneNode ne doit pas avoir de constructeur par défaut, de plus classe abstraite, donc soucis....
Hors ligne
Ah oui , tiens ...GCC ne m'avait même pas fait un warning ...Faut dire aussi que je code pas comme un dieu ^^'
Je vais essayer de résoudre ça ...
Mais bon , ce n'est pas la partie de mon code qui m'interesse le plus pour l'instant .
Je pense que l'erreur de segmentation vient d'une de mes classes Arme ou Player ...
Hors ligne
Suivant le type de compilateur, cela passe en fait. Mais je ne suis pas sur que cela soit très sein effectivement.
C'est peut-etre même une partie de la réponse concernant tes soucis de segmentation mémoire....
Hors ligne
sinon utilise les file(file d'attente premier arriver premier servi)
#include <irr/irrlicht.h> #include <queue> using namespace std; int main() { queue<ISceneNode*> balle; //Pour ajouter une balle ISceneNode* toAdd= ...... balle.push(toAdd); //Pour récupéré le premier élément ajouter ISceneNode* toRecup = bale.front(); //Pour effacer le premier élément balle.pop(); //Pour avoir la taille de la file bale.size(); }
la fonction .size renvoie le nombre d'élément + 1
Si on fait .pop alors que la file et vide le programe plante toujours t'ester l'existence d'element avec .empty() qui renvoie un boolean
Hors ligne
Oua , c'est intéressant ça pspmy , merci !
Hors ligne
pspmy :
d r
Hors ligne
sinon ramis je te conseille d'utiliser une structure pour t'es balles
Hors ligne
Une structure ? tu pense vraiment ?
Tu sais , c'était très secondaire ça .C'est juste pour ajouter une pointe de réalisme ...
Hors ligne
sa permettra de mieux gérer tes balle et leur donner des attribut ex : explosif, rapide, fine, unique .....
Hors ligne
sinon tu peut utiliser les vector et les iterateur pour les parcourir mais je sais pas si ce de ton niveau
résume sur les vector:
Les std::vector sont des conteneurs génériques standards implémentés sous forme de séquence et réalisés de telle sorte que toutes les opérations soient effectuées en un temps optimal.
Dernière modification par pspmy (16-11-2008 20:11:35)
Hors ligne
.........
C'est pas de mon niveau
Par contre , une petite explication rapide en français courant m'interesserait bien
Sinon , pour mes problêmes de mémoire , j'ai pensé à un truc : peut être faudrait il faire un drop sur les mesh et les nodes des classes ? la segmentation est bien une histoire de fuite de mémoire , non ?
Hors ligne
sa dépend sinon essaye avec xxx->remove();
mais je pense que ton erreur viens de ta déclaration de tableau en c tu peut seulement déclarer un tableau de taille fixe mais on peut le rallonger a la main au coup d'allocation mais c'est faute de plantage essaye avec les file pour commencez
Hors ligne
pspmy :
mais je pense que ton erreur viens de ta déclaration de tableau en c tu peut seulement déclarer un tableau de taille fixe mais on peut le rallonger a la main au coup d'allocation mais c'est faute de plantage essaye avec les file pour commencez
En effet, et c'est pour cela qu'une fois lu et testé ton code, je suis partie sur cette piste là. Si une fois régularisé cette partie cela ne règle toujours vraiment
ton soucis, alors il sera temps d'explorer d'autres pistes....
Hors ligne
Bon , me suis pas fatigué , j'ai passé cette partie là en commentaire : même résultat .
Une autre piste ?
J'vais aller corriger mon code en attendant Merci de votre aide en tout cas !
Hors ligne
En testant un peu ton code, j'ai un crash systématique dans la fonction 'AttacherArme' de la classe Player.
Visiblement, le soucis se situe à partir de 'nodearme->setPosition(position)' , comme si le pointeur semblait ne pas être valide....
Hors ligne
dsl la jai pas le code sous la main donc je peut pas vous aidez et la je vais regarder des épisode de kaamlot donc bon courage je reviens après
Hors ligne
Un petit debug avec code::blocks m'a donné le même résultat , mais je n'y ai pas vraiment fait attention alors car j'ai écrit cette fonction il y a quelques jours et elle marchait très bien ... Pourtant , le code a l'air valable , non ?
edit : pspmy > http://www.2shared.com/file/4292241/25993139/fps.html voilà mon code
Dernière modification par ramis (16-11-2008 21:27:17)
Hors ligne
J'ai trouvé, en fait toujours dans la fonction 'AttacherArme' de la classe Player, ton pgm fonctionne bien si je commente la ligne
nodearme->setParent(arme.getCamera());
normal, arme.getCamera() = NULL
Hors ligne
bah pourquoi ? elle est pas correcte cette ligne ?
Comprend pas
En faisant
ICameraSceneNode* newcamera=arme.getCamera();
nodearme->setParent(newcamera);
ça marche ???
edit : ah ok ... bug de logique , alors ?
Dernière modification par ramis (16-11-2008 21:46:32)
Hors ligne
ramis :
ah ok ... bug de logique , alors ?
alors ? la nuit porte conseil. Demain soir en rentrant du boulot je re-jetterais un œil à ton code
Hors ligne
Pages: 1