Citation Envoy� par nuKs Voir le message
Bonsoir.
Apr�s plus de 2h de recherche, je me suis r�sign� � venir poster ici
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
NuMap::NuMap(const std::string &fileName) : _fileName(fileName)
,_map(15, std::vector< std::vector<int> >(11, std::vector<int>(10, 10)))
// _map est bien initialisé
,name("New map")
,version("1")
,author("Unknown")
,tileset("common")
,_rootHandle(0)
,_headHandle(0)
,_casesHandle(0) {
}
 
void NuMap::setCase(const int idCase, const int z, const int value) {
	const int y = std::ceil((float)idCase / 15.f);
	const int x = idCase - ((y-1) * 15);
 
	std::cout << "id" << idCase << "_" << "x" << x << "y" << y << std::endl; // tout est en ordre, le problème ne vient pas d'ici
	std::cout << "size" << _map.size() << std::endl << std::endl; // ici ça marche... Avec des valeurs irréelles !
	if(_map[x-1][y-1].size() < z) { // le plantage s'effectue ici. Pas dans la condition, mais bien lors de l'utilisation de la méthode size().
		//_map[x][y].resize(1);
		throw std::string("comment est-ce possible ?");
	}
 
	//_map[x][y].push_back(value);
}
L'appel provient d'une m�thode d'une classe fille:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
bool onMouseMove(const CEGUI::EventArgs& e) {
	if(NuMapCEGUI::_buttonDown) {
		const CEGUI::WindowEventArgs& we = static_cast<const CEGUI::WindowEventArgs&>(e); // peut-être me suis-je trompé ici ?
 
		int senderID = std::atoi(we.window->getText().c_str());
		NuMap::setCase(senderID, 1, 1); // z vaut toujours 1. Erreur lors de l'appel de cette fonction
	}
}
Apr�s avoir v�rifi� que mon algorithme fonctionne parfaitement, et qu'il n'est pas la cause du probl�me, j'obtient un vecteur _map avec plus d'un millions comme valeur de size() (merci GDB) alors qu'il est initialis� � 15 emplacements.

Il n'y a pas de plantage lorsque les variables x et y ont des valeurs petites.

Autre bizarrerie, avant que je mette idCase en const, il arrivait que GDB lui donne des sommes astronomiques aussi, mais que tout soit correcte lorsque j'affiche sa valeur avec cout. [Edit] Rectification, m�me en const, ce probl�me arrive [/Edit]

Je vous en supplie ! Programmeurs de tous horizons, je vous en conjure ! Avez-vous une id�e de l'atrocit� que j'ai commis ?
Merci d'avance
Edit:
J'ai trouv� d'o� vient plus ou moins le probl�mes. Dans la fonction appelante (Cf. onMouseMove), les variables this et senderID sont d�clar�s comme outofscope (� ni rien comprendre, vus que dans le cout, senderID est toujours not� comme < 200).

Edit2:
Avec un peu de bouleau, seul la variable this est maintenant d�clar�e comme outofscope. Lorsque je regarde un peu ce qu'elle contient, les variables publiques de la classe m�res sont toutes not�es en rouges (mais leur contenu est valide).

Edit3:
En fait je pense que la variable est d�clar�e comme outofscope par GDB mais reste bien fonctionnelle. Ca doit �tre du fait que GDB n'y a pas acc�s directement car c'est une variable locale.