Buenas!
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:
#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
¿Alguien tiene idea de por qué demonios me pasa esto?