Eli muutan int tekstiä string muoton ja yritän ladata sitä ttf:llä ja sitten tulostaa. Mutta koodi ei toimi vaan ohjelma kaatuu. Käytin debuggeria avuksi, mutta todella outo ilmoitus tulee. Eikä anna edes rivi ehdotuksia.
Program received signal SIGILL, Illegal instruction.
In __DTOR_LIST__ () ()
ja koodi jota käytän on:
static SDL_Surface *Game::Tekstit::LoadTextString(const char *text, bool muuttuja, std::string muuttujan_arvo, TTF_Font *fontt, int Red, int Green, int Blue) { SDL_Color textcolor = {Red,Green,Blue}; if (muuttuja) { char mjono[10]; sprintf(mjono, "%s", muuttujan_arvo.c_str()); SDL_Surface *tex = TTF_RenderText_Blended(fontt, mjono, textcolor); return tex; } else { SDL_Surface *tex = TTF_RenderText_Blended(fontt, text, textcolor); return tex; } } SDL_FreeSurface(Tekstit::text_33); ss << paiva; sss << kuukausi; ssss << vuosi; paivaa = ss.str(); mounth = sss.str(); year = ssss.str(); day = paivaa + " . " + mounth + " . " + year; Tekstit::text_33 = Tekstit::LoadTextString(" ", true, day, Fontit::font2, 255, 0, 0);
nimiavaruudessa Game on määritelty kaikki ss, sss, ssss streamit.
Ohjelma ei kaadu jos otan pois Tekstit::text_33 = Tekstit::LoadTextString(); rivin pois. Eli mikä vikana?
Ps. Niin ja konsoliin ohjelma kirjoittaa:
Process returned -1073741795 <0xC000001D>
Mjono voi olla liian pieni. Miksi edes kaytat sprintf:aa merkkijonon kopioimiseen?
Tästä saisi vielä tyylikkäämmän, mutta koodin rakenne pitäisi kirjoittaa melko lailla kokonaan uusiksi. Kuitenkin tässä vähän korjailtu versio.
mika132 kirjoitti:
static SDL_Surface *Game::Tekstit::LoadTextString(std::string teksti, int muuttuja) { std::string mjono = teksti; if (muuttuja) { mjono = apufunktiot::muunna_tekstiksi(muuttuja); } SDL_Surface *tex = TTF_RenderText_Blended(Game::fontti, mjono.c_str(), Game::textcolor); return tex; } /** Mikä näiden alla olevien rivien tarkoitus on? SDL_FreeSurface(Tekstit::text_33); ss << paiva; sss << kuukausi; ssss << vuosi; paivaa = ss.str(); mounth = sss.str(); year = ssss.str(); day = paivaa + " . " + mounth + " . " + year; **/ ss << paiva << " . " << kuukausi << " . " << vuosi; Tekstit::text_33 = Tekstit::LoadTextString(day.str());
Aihe on jo aika vanha, joten et voi enää vastata siihen.