Pages: 1
- Accueil forums
- » Installation/Compilation
- » segmentation dans mon code...
16-11-2008 16:46:50
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 81.51.152.82
- Courriel
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....
Force et sagesse...
Hors ligne
16-11-2008 16:54:15
- ramis
- Membres
- Date d'inscription:
- Messages: 92
- IP: 92.133.214.145
- Courriel
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
16-11-2008 17:00:02
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 81.51.152.82
- Courriel
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
16-11-2008 17:24:29
- hardcpp
- Membres

- Date d'inscription:
- Messages: 229
- IP: 83.198.246.220
- Courriel
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
16-11-2008 17:37:12
- ramis
- Membres
- Date d'inscription:
- Messages: 92
- IP: 92.133.214.145
- Courriel
Oua , c'est intéressant ça pspmy , merci !
Hors ligne
16-11-2008 17:56:17
16-11-2008 18:15:15
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 81.51.152.82
- Courriel
pspmy Ecris:
d r

Force et sagesse...
Hors ligne
16-11-2008 18:15:53
- hardcpp
- Membres

- Date d'inscription:
- Messages: 229
- IP: 83.198.246.220
- Courriel
sa veut dire : de rien x)
Hors ligne
16-11-2008 18:17:02
- hardcpp
- Membres

- Date d'inscription:
- Messages: 229
- IP: 83.198.246.220
- Courriel
sinon ramis je te conseille d'utiliser une structure pour t'es balles
Hors ligne
16-11-2008 19:03:49
- ramis
- Membres
- Date d'inscription:
- Messages: 92
- IP: 92.133.214.145
- Courriel
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
16-11-2008 19:05:29
- hardcpp
- Membres

- Date d'inscription:
- Messages: 229
- IP: 83.198.246.220
- Courriel
sa permettra de mieux gérer tes balle et leur donner des attribut ex : explosif, rapide, fine, unique .....
Hors ligne
16-11-2008 19:11:06
- hardcpp
- Membres

- Date d'inscription:
- Messages: 229
- IP: 83.198.246.220
- Courriel
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.
Hors ligne
16-11-2008 19:33:19
- ramis
- Membres
- Date d'inscription:
- Messages: 92
- IP: 92.133.214.145
- Courriel
.........
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
16-11-2008 19:37:08
- hardcpp
- Membres

- Date d'inscription:
- Messages: 229
- IP: 83.198.246.220
- Courriel
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
16-11-2008 19:56:18
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 81.51.152.82
- Courriel
pspmy Ecris:
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....
Force et sagesse...
Hors ligne
16-11-2008 20:00:30
- ramis
- Membres
- Date d'inscription:
- Messages: 92
- IP: 92.133.214.145
- Courriel
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
16-11-2008 20:22:40
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 81.51.152.82
- Courriel
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
16-11-2008 20:24:27
- hardcpp
- Membres

- Date d'inscription:
- Messages: 229
- IP: 83.198.246.220
- Courriel
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
16-11-2008 20:26:30
- ramis
- Membres
- Date d'inscription:
- Messages: 92
- IP: 92.133.214.145
- Courriel
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 ![]()
Hors ligne
16-11-2008 20:41:45
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 81.51.152.82
- Courriel
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 ![]()
Force et sagesse...
Hors ligne
16-11-2008 20:44:02
- ramis
- Membres
- Date d'inscription:
- Messages: 92
- IP: 92.133.214.145
- Courriel
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 ? ![]()
Hors ligne
16-11-2008 21:36:16
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 81.51.152.82
- Courriel
ramis Ecris:
ah ok ... bug de logique , alors ?
alors ? la nuit porte conseil. Demain soir en rentrant du boulot je re-jetterais un œil à ton code
Force et sagesse...
Hors ligne



