absturz....



  • Kann hat jemand eine Idee, warum es zu einem Absturz beim Beenden des Programms kommt??? desweiteren wird auch kein Sound ausgegeben.

    /*************************************************************************//
    //
    // Datei:		sound.h	
    // Autor:		ücü
    // Erstellt:	20.02.2006
    // Geändert:	20.02.2006
    //
    //*************************************************************************//
    
    //*************************************************************************//
    // INCLUDE GUARD
    //*************************************************************************//
    #if !defined(__sound_h__)
    #define __sound_h__
    //*************************************************************************//
    
    //*************************************************************************//
    // HEADERS
    //*************************************************************************//
    #include <al/alut.h>
    #include <iostream>
    
    //*************************************************************************//
    // LIBRARYS
    //*************************************************************************//
    #pragma comment(lib, "alut.lib")
    
    //*************************************************************************//
    // NAMESPACE
    //*************************************************************************//
    namespace audio
    {
    
    struct sndAttrb
    {
    
    };
    
    class sound
    {
    private:
    	unsigned int *buffer_;
    	unsigned int *source_;
    
    public:
    	sound(void);
    	~sound(void);
    
    	void setBuffer(unsigned int& buffer);
    	void setSource(unsigned int& source);
    
    	bool load(const std::basic_string<char>& filename);
    	void setRepeat(bool repeat);
    
    	void play	(void);
    	void rewind	(void);
    	void stop	(void);
    	void pause	(void);
    };
    
    }
    
    //*************************************************************************//
    // INCLUDE GUARD
    //*************************************************************************//
    #endif
    
    //*************************************************************************//
    
    //*************************************************************************//
    //
    // Datei:		sound.cpp	
    // Autor:		ücü
    // Erstellt:	20.02.2006
    // Geändert:	20.02.2006
    //
    //*************************************************************************//
    
    //*************************************************************************//
    // HEADERS
    //*************************************************************************//
    #include "sound.h"
    
    //*************************************************************************//
    // NAMESPACE
    //*************************************************************************//
    
    namespace audio
    {
    
    //*************************************************************************//
    // PUBLIC Konstruktor
    //*************************************************************************//
    sound::sound(void)// : buffer_(NULL), source_(NULL)
    {
    
    }
    
    //*************************************************************************//
    // PUBLIC Destruktor
    //*************************************************************************//
    sound::~sound(void)
    {
    	if(buffer_)
    		delete(buffer_);
    	if(source_)
    		delete(source_);
    }
    
    //*************************************************************************//
    // PUBLIC setBuffer
    //*************************************************************************//
    void sound::setBuffer(unsigned int& buffer)
    {
    	buffer_ = &buffer;
    }
    
    //*************************************************************************//
    // PUBLIC setSource
    //*************************************************************************//
    void sound::setSource(unsigned int& source)
    {
    	source_ = &source;
    }
    
    //*************************************************************************//
    // PUBLIC load
    //*************************************************************************//
    bool sound::load(const std::basic_string<char>& filename)
    {
    	alGetError();
    
    	ALenum		format;
    	ALvoid*		data;
    	ALsizei		size;
    	ALsizei		freq;
    	ALboolean	loop;
    
    	alutLoadWAVFile(filename.c_str(), &format, &data, &size, &freq, &loop);
    	alBufferData(*buffer_, format, data, size, freq);
    	alutUnloadWAV(format, data, size, freq);
    
    	alSourcei(*source_, AL_BUFFER, *buffer_);
    
    	if(alGetError() != AL_NO_ERROR)
    		return false;
    	return true;
    }
    //*************************************************************************//
    // PUBLIC setRepeat
    //*************************************************************************//
    void sound::setRepeat(bool repeat)
    {
    
    }
    
    //*************************************************************************//
    // PUBLIC play
    //*************************************************************************//
    void sound::play(void)
    {
    	alSourcePlay(*source_);
    }
    
    //*************************************************************************//
    // PUBLIC rewind
    //*************************************************************************//
    void sound::rewind(void)
    {
    	alSourceRewind(*source_);
    }
    
    //*************************************************************************//
    // PUBLIC stop
    //*************************************************************************//
    void sound::stop(void)
    {
    	alSourceStop(*source_);
    }
    
    //*************************************************************************//
    // PUBLIC pause
    //*************************************************************************//
    void sound::pause(void)
    {
    	alSourcePause(*source_);
    }
    
    }
    
    //*************************************************************************//
    
    //*************************************************************************//
    //
    // Datei:		manager.h	
    // Autor:		ücü
    // Erstellt:	20.02.2006
    // Geändert:	20.02.2006
    //
    //*************************************************************************//
    
    //*************************************************************************//
    // INCLUDE GUARD
    //*************************************************************************//
    #if !defined(__manager_h__)
    #define __manager_h__
    //*************************************************************************//
    
    //*************************************************************************//
    // HEADERS
    //*************************************************************************//
    #include <al/al.h>
    #include <al/alc.h>
    #include "sound.h"
    
    //*************************************************************************//
    // LIBRARYS
    //*************************************************************************//
    #pragma comment(lib, "OpenAL32.lib")
    
    //*************************************************************************//
    // NAMESPACE
    //*************************************************************************//
    namespace audio
    {
    
    	const unsigned int maxBuffers	= 100;
    	const unsigned int maxSources	= 100;
    
    }
    
    namespace audio
    {
    
    class manager
    {
    private:
    	ALCdevice*		device_;
    	ALCcontext*		context_;
    
    	unsigned int	buffers_[maxBuffers];
    	unsigned int	sources_[maxSources];
    	sound			sounds_ [maxSources];
    
    private:
    	manager(void);
    	manager(const manager& other);
    	~manager(void);
    
    	manager& operator =(const manager& other);
    
    public:
    	inline static manager& getInst(void)
    	{
    		static manager instance;
    
    		return(instance);
    	}
    
    	void initialize		(void);
    	void restore		(void);
    	void shutdown		(void);
    
    	bool loadSound(unsigned int snd,
    				   const std::basic_string<char>& filename);
    
    	void remove		(unsigned int snd);
    	void removeAll	(void);
    
    	void play		(unsigned int snd);
    	void playAll	(void);
    
    	void rewind		(unsigned int snd);
    	void rewindAll	(void);
    
    	void pause		(unsigned int snd);
    	void pauseAll	(void);
    
    	void stop		(unsigned int snd);
    	void stopAll	(void);
    
    	void setRepeat	(unsigned int snd, bool repeat);
    };
    
    }
    
    //*************************************************************************//
    // INCLUDE GUARD
    //*************************************************************************//
    #endif
    
    //*************************************************************************//
    
    //*************************************************************************//
    //
    // Datei:		manager.cpp	
    // Autor:		ücü
    // Erstellt:	20.02.2006
    // Geändert:	20.02.2006
    //
    //*************************************************************************//
    
    //*************************************************************************//
    // HEADERS
    //*************************************************************************//
    #include "manager.h"
    
    //*************************************************************************//
    // NAMESPACE
    //*************************************************************************//
    namespace audio
    {
    
    //*************************************************************************//
    // PRIAVTE Konstruktor
    //*************************************************************************//
    manager::manager(void)
    {
    	device_		= NULL;
    	context_	= NULL;
    
    	for(unsigned int i = 0; i < maxBuffers; i ++)
    		sounds_[i].setBuffer(buffers_[i]);
    
    	for(unsigned int i = 0; i < maxSources; i ++)
    		sounds_[i].setSource(sources_[i]);
    }
    
    //*************************************************************************//
    // PRIAVTE Copy-Konstruktor
    //*************************************************************************//
    manager::manager(const manager& other)
    {
    
    }
    
    //*************************************************************************//
    // PRIAVTE Destruktor
    //*************************************************************************//
    manager::~manager(void)
    {
    	shutdown();
    }
    
    //*************************************************************************//
    // PUBLIC initialize
    //*************************************************************************//
    void manager::initialize(void)
    {
    	device_ = alcOpenDevice(NULL);
    	if(device_)
    	{
    		context_ = alcCreateContext(device_, NULL);
    		alcMakeContextCurrent(context_);
    	}
    
    	alGenBuffers(maxBuffers, buffers_);
    	alGenSources(maxSources, sources_);
    }
    
    //*************************************************************************//
    // PUBLIC restore
    //*************************************************************************//
    void manager::restore(void)
    {
    	shutdown();
    
    	device_ = alcOpenDevice(NULL);
    	if(device_)
    	{
    		context_ = alcCreateContext(device_, NULL);
    		alcMakeContextCurrent(context_);
    	}
    
    	alGenBuffers(maxBuffers, buffers_);
    	alGenSources(maxSources, sources_);
    }
    
    //*************************************************************************//
    // PUBLIC shutdown
    //*************************************************************************//
    void manager::shutdown(void)
    {	
    	alDeleteSources(maxSources, sources_);
    	alDeleteBuffers(maxBuffers, buffers_);
    
    	context_	= alcGetCurrentContext();
    	device_		= alcGetContextsDevice(context_);
    
    	alcMakeContextCurrent(NULL);
    	alcDestroyContext(context_);
    	alcCloseDevice(device_);
    }
    
    //*************************************************************************//
    // PUBLIC create
    //*************************************************************************//
    bool manager::loadSound(unsigned int snd,
    						const std::basic_string<char>& filename)
    {
    	if(snd < maxSources)
    		if(sounds_[snd].load(filename))
    			return(true);
    	return(false);
    }
    
    //*************************************************************************//
    // PUBLIC remove
    //*************************************************************************//
    void manager::remove(unsigned int snd)
    {
    
    }
    
    //*************************************************************************//
    // PUBLIC removeAll
    //*************************************************************************//
    void manager::removeAll(void)
    {
    
    }
    
    //*************************************************************************//
    // PUBLIC play
    //*************************************************************************//
    void manager::play(unsigned int snd)
    {
    	if(snd < maxSources)
    	sounds_[snd].play();
    }
    
    //*************************************************************************//
    // PUBLIC playAll
    //*************************************************************************//
    void manager::playAll(void)
    {
    }
    
    //*************************************************************************//
    // PUBLIC play
    //*************************************************************************//
    void manager::pause(unsigned int snd)
    {
    	if(snd < maxSources)
    		sounds_[snd].pause();
    }
    
    //*************************************************************************//
    // PUBLIC pauseAll
    //*************************************************************************//
    void manager::pauseAll(void)
    {
    }
    
    //*************************************************************************//
    // PUBLIC stop
    //*************************************************************************//
    void manager::stop(unsigned int snd)
    {
    	if(snd < maxSources)
    		sounds_[snd].stop();
    }
    
    //*************************************************************************//
    // PUBLIC stopAll
    //*************************************************************************//
    void manager::stopAll(void)
    {
    }
    
    //*************************************************************************//
    // PUBLIC setRepeat
    //*************************************************************************//
    void manager::setRepeat(unsigned int snd, bool repeat)
    {
    	if(snd < maxSources)
    		sounds_[snd].setRepeat(repeat);
    }
    
    }
    
    //*************************************************************************
    

    und in der main:

    int main(int argc, wchar_t* argv[])
    {
    
    	audio::manager::getInst().initialize();
    	if(!audio::manager::getInst().loadSound(1, "ump45.wav"))
    	std::cout << "Cant load Sound";	
    	audio::manager::getInst().play(1);
    	audio::manager::getInst().shutdown();	
    
    	char a;
    	std::cin >> a;
    
    	return 0;
    }
    


  • Beim absturz soll die manager::shutdown dran schuld sein. wenn ich die aber raus nehme, kommt es auch zu einem absturz.

    Hier die Absturzmeldung:
    http://img442.imageshack.us/img442/8945/clipboard5qe.jpg



  • beschreib deinen fehler mal bitte genau und benutze erstmal den debugger
    das ist ein bisschen viel code ....

    EDIT: ich glaube kaum das jemand aus den adressen den fehler lesen kann



  • Sry, ich habe auch keine Ahnung vom Debuggen, bis jetzt gings auch immer ohne.



  • ücü schrieb:

    Sry, ich habe auch keine Ahnung vom Debuggen, bis jetzt gings auch immer ohne.

    dazu sag ich jetzt nichts, außer vlt. das es hier glaub einen artikel zu dem thema gibt 🙄



  • Der Debuger zeigt beim herunterfahren des Programms folgenden Fehler an: { CXX0036: Fehler: Fehlerhafte Kontextangabe {...}



  • Gut, hat sich geklärt. Es ist ein fataler Konzeptfehler im Projekt


Anmelden zum Antworten