Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/11/2012, 14:06
ShotoReaper
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
Crasheo por motivos que desconozco...

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?