Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: SDL_Mixer kaataa ohjelman

Sivun loppuun

ankzilla [12.11.2009 16:28:13]

#

Nyt huomasin, että muinaisessa yrityksessäni koodata musiikinsoitin, ei ollutkaan virhe koodissani, jota epätoivoisesti etsin päiväkausia.

Elikkäs, nyt hoksasin että kun laitoin SDL_Mixerin valmiiksi yhteen tiedostooni tulevaisuutta varten, ohjelma vetää jumiin lopetusvaiheessa, eli kun suoritetaan funktio Mix_CloseAudio();

Et varmaan sinäkään usko, että koko homma kaatuisi viattomaan funktioon, jotenka laitanpa "koko" mikserin koodin tähän, eli en koko koodia:

// Perus includet
#include <SDL/SDL_mixer.h>
int main() {
	bool active = 1;
	if(SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) == -1)
		active = 0;
	if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024) == -1)
		active = 0;
	// Koodia
	Mix_CloseAudio();
	// Muut lopetukset
}

...oon toki alustanu & asentanu SDL:n, ja kaiken muunkin.

Ja käännös:

g++ dididam.cpp -o daidadim -lSDL -lSDL_ttf -lSDL_mixer -lSDL_gfx

Mitäs kaikkea vikaa ylläolevasta voisikaan löytyä? :o

Edit: Voisiko johtua iostreamin puutteesta?

Metabolix [12.11.2009 16:33:40]

#

No ei se vika varmaan tuosta pätkästä löydy, kun kyseessä on kuitenkin jokaisesta ohjelmasta löytyvä alustus ja lopetus.

Millä olet todennut, että vika on juuri kyseisessä kutsussa?

ankzilla [12.11.2009 16:36:14]

#

Metabolix kirjoitti:

No ei se vika varmaan tuosta pätkästä löydy, kun kyseessä on kuitenkin jokaisesta ohjelmasta löytyvä alustus ja lopetus.

Millä olet todennut, että vika on juuri kyseisessä kutsussa?

Koska kaikki toimii muuten hyvin kuten ennenkin, mutta kun tuon lisäsin, painoin esciä, ohjelma vetää jumiin.
Kaikista v-maisinta tämä on koko ruudun kokoisissa ohjelmassani, ku pitää koko kone käynnistää uudelleen.

Metabolix [12.11.2009 16:47:04]

#

ankzilla kirjoitti:

Edit: Voisiko johtua iostreamin puutteesta?

Mitä ihmeen merkitystä sillä muka olisi?

ankzilla kirjoitti:

Koska kaikki toimii muuten hyvin kuten ennenkin, mutta kun tuon lisäsin, painoin esciä, ohjelma vetää jumiin.

Onko tuo varmasti pääsilmukan ulkopuolella, kuten aloitusviestisi koodista voi ymmärtää? Oletko jotenkin tarkistanut, että ohjelma pääsee edes tuohon asti? (Voit tarkistaa asian debuggerilla tai vaikka tulostamalla std::cerr-virtaan viestejä.)

ankzilla [12.11.2009 16:51:56]

#

Metabolix kirjoitti:

Onko tuo varmasti pääsilmukan ulkopuolella, kuten aloitusviestisi koodista voi ymmärtää? Oletko jotenkin tarkistanut, että ohjelma pääsee edes tuohon asti? (Voit tarkistaa asian debuggerilla tai vaikka tulostamalla std::cerr-virtaan viestejä.)

Pääsilmukan ulkopuolella on. Ihan lopussa, mutta kuitenkin ennen return 0:aa.
Kyllähän sen ohjelman pitäisi tuohon asti päästä, kun ennen kuin laitoin noita SDL_Mixerin juttuja tohon se toimi mainiosti.

Debuggereista en tiedä yhtään mitään, kuin tuosta cerristäkään.
Pitänee kookletella tuota, jos jotain löytyisi...
...ja löytyikin:
http://www.cplusplus.com/reference/iostream/cerr/

Nyt tekisi mieli kysyä, että mitä tuo iostream.h oikeasti tekee?

Metabolix [12.11.2009 17:03:48]

#

Oikea tiedosto on iostream ilman .h:ta. Include liittää tiedoston toiseen ja otsikkotiedostot sisältävät esittelyitä.

C++ sisältää neljä standardivirtaa: std::cin lukemiseen, std::cout normaaliin tulostamiseen (käyttäjälle) sekä std::cerr ja std::clog virheilmoitusten ja lokitietojen tulostamiseen. Jos ei ymmärrä näiden eroista (joita en nyt aio selittää), kannattaa vain muistaa, että std::cerr on näistä turvallisin valinta, jos on tarkoitus saada jotain tulostettua juuri ennen kaatumista.

ankzilla [12.11.2009 17:10:15]

#

Kiitos.
Taisi vahingossa tulla tuo .h iostreamin perään.(?)
Mutta kokeilenpa tuota siis, kiitos =>

Edit: Ei toimi. Pitänee perehtyä asiaan syvemmin..

Edit2: Nyt ku laitoin väliaikaisesti kommentit tuohon SDL_Mixerin alustukseen ja lopetukseen, kaikki toimii taas kuin unelma.

Metabolix [12.11.2009 17:31:07]

#

ankzilla kirjoitti:

Edit: Ei toimi. Pitänee perehtyä asiaan syvemmin..

Mikä ei toimi? Viestien tulostus std::cerr-virtaanko? Miten ei toimi?

ankzilla [12.11.2009 18:25:55]

#

Metabolix kirjoitti:

ankzilla kirjoitti:

Edit: Ei toimi. Pitänee perehtyä asiaan syvemmin..

Mikä ei toimi? Viestien tulostus std::cerr-virtaanko? Miten ei toimi?

En osaa sanoa. :D
Kääntäjästä meni läpi kylläkin...
Mutta tsekkailen näitä juttuja viel ku en oikein tiedä miten tuo cerri toimii.
(Käytän siis using namespace std:tä)

vehkis91 [12.11.2009 18:49:35]

#

using namespace std;
cerr<<"Virhe!!!!"<<std::endl;

Metabolix [12.11.2009 19:17:15]

#

Ihan samalla tavalla se toimii kuin cout. Tee vaikka Hello World -ohjelma sillä, niin näet.

ankzilla [12.11.2009 19:27:27]

#

Juu, pitää kokeilla.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta