Tengo el siguiente codigo que se ocupa de cargar varios tipos de objetos. Durante la ejecucion carga dos de los tres objetos, al llegar al tercero crashea. Lo curioso es que si añado un std::cout despues de ese punto, o cambio la ruta del archivo por otra ( por ejemplo, si lo carga en "gekko/data/", copio esta carpeta y la llamo "gekko_copia/data/"...¡¡Funciona correctamente!!. Estoy por volverme loco la verdad
Código:
¿Alguien tiene idea de por qué demonios me pasa esto? #ifndef GECONTENTMANAGER_H #define GECONTENTMANAGER_H #include <string> #include <typeinfo> #include <map> #include <sstream> #include <iostream> #include "../include/object.hpp" #include "../include/testclass.h" class GEContentManager { public: GEContentManager(); char* rootDirectory; // Funcion que carga cualquier tipo de archivo a partir de una ruta y un T. // Funcion que carga un archivo a partir del rootDirectory + filename. Por ejemplo 'C:\\Data\' + 'cube.obj' template <class T> T* Load(std::string filename) { // Buscamos el objeto, para ver si ya esta registrado std::map<std::string, object*>::iterator it = loadedObjects.find(filename); // Retorna el puntero del objeto si esta almacenado ya if(it!=loadedObjects.end()) { std::cout<<"El objeto "<<it->first<<" ya ha sido cargado"<<std::endl; return (T*)it->second; } //Si no lo hay, carga una nueva // Obtenemos la ruta del archivo std::stringstream sstm; sstm << rootDirectory << filename; std::cout<<"Load file "<<sstm.str()<<std::endl; // Creamos un nuevo objeto del tipo enviado T* t = new T; // Llenamos el objeto t->Load(sstm.str()); //CRASH EN ESTE PUNTO. A partir de aqui un cout y como si nada hubiera pasado... // Lo añadimos al mapa de objetos cargados loadedObjects.insert(std::pair<std::string, object*>(filename,t)); // retornamos la instancia con los datos cargados return t; } protected: private: // Mapa donde almacenamos punteros hacia los objetos cargados. //Asi evitamos cargar dos veces un mismo objeto std::map<std::string, object*> loadedObjects; }; #endif // GECONTENTMANAGER_H