#0 

16-11-2008 17:46:50

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Petit post pour discuter de ton soucis Ramis de segmentation.

Tout d'abord, j'ai constaté un petit soucis dans ton code:

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

Code:

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....


Force et sagesse...

Hors ligne


#1 

16-11-2008 17:54:15

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

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


#2 

16-11-2008 18:00:02

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

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....


Force et sagesse...

Hors ligne


#3 

16-11-2008 18:24:29

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

sinon utilise les file(file d'attente premier arriver premier servi)

Code:

#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();
}

ATTENTION
la fonction .size renvoie le nombre d'élément + 1

ATTENTION
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


#4 

16-11-2008 18:37:12

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

Oua , c'est intéressant ça pspmy , merci !

Hors ligne


#5 

16-11-2008 18:56:17

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

d r

Hors ligne


#6 

16-11-2008 19:15:15

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

pspmy :

d r



Force et sagesse...

Hors ligne


#7 

16-11-2008 19:15:53

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

sa veut dire : de rien x)

Hors ligne


#8 

16-11-2008 19:17:02

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

sinon ramis je te conseille d'utiliser une structure pour t'es balles

Hors ligne


#9 

16-11-2008 20:03:49

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

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


#10 

16-11-2008 20:05:29

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

sa permettra de mieux gérer tes balle et leur donner des attribut ex : explosif, rapide, fine, unique .....

Hors ligne


#11 

16-11-2008 20:11:06

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

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


#12 

16-11-2008 20:33:19

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

.........
C'est pas de mon niveau big_smile
Par contre , une petite explication rapide en français courant m'interesserait bien smile
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


#13 

16-11-2008 20:37:08

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

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


#14 

16-11-2008 20:56:18

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

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.... wink


Force et sagesse...

Hors ligne


#15 

16-11-2008 21:00:30

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

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 smile Merci de votre aide en tout cas !

Hors ligne


#16 

16-11-2008 21:22:40

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

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....


Force et sagesse...

Hors ligne


#17 

16-11-2008 21:24:27

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

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


#18 

16-11-2008 21:26:30

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

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 smile

Dernière modification par ramis (16-11-2008 21:27:17)

Hors ligne


#19 

16-11-2008 21:41:45

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

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   wink


Force et sagesse...

Hors ligne


#20 

16-11-2008 21:44:02

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

bah pourquoi ? elle est pas correcte cette ligne neutral ?
Comprend pas sad
En faisant
ICameraSceneNode* newcamera=arme.getCamera();
nodearme->setParent(newcamera);

ça marche ???

edit : ah ok ... bug de logique , alors ? neutral

Dernière modification par ramis (16-11-2008 21:46:32)

Hors ligne


#21 

16-11-2008 22:36:16

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

ramis :

ah ok ... bug de logique , alors ? neutral


alors ? la nuit porte conseil. Demain soir en rentrant du boulot je re-jetterais un œil à ton code

wink


Force et sagesse...

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
Analysé par
880 membres
1424 sujets
11113 messages
Dernier membre inscrit: mandrifidy
28 invités en ligne
Aucun membre connecté
RSS Feed