Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Crasheo por motivos que desconozco...

Estas en el tema de Crasheo por motivos que desconozco... en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 27/11/2012, 14:06
 
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?
  #2 (permalink)  
Antiguo 28/11/2012, 08:27
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Crasheo por motivos que desconozco...

Me respondo a mi mismo, el problema era con
Código:
 t->Load(sstm.str())
. Exactamente con sstm.str(). Todo funciona correctamente si en lugar de poner eso coloco un string con el contenido del sstm.str(). Es decir:

Código:
// Obtenemos la ruta del archivo
            std::stringstream sstm;
            sstm << rootDirectory << filename;
            std::cout<<"Load file "<<sstm.str()<<std::endl;
            std::string path = sstm.str();
            // Creamos un nuevo objeto del tipo enviado
            T* t = new T;
            // Llenamos el objeto
            t->Load(path);

Etiquetas: c++, cout, crasheo, ruta
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:11.