Päiviä, tämmöinen ongelma on, ja se on perin omituinen kyllä. Heitellään heti turhia puheita käyttelemättä koodia kehiin:
int rivix = tid * basepx + 1; SDL_Rect *tilecoords; tilecoords->x = rivix; // Ei toimi, vaikka laittaisin (Sint16) alkuun tilecoords->y = 1;
Eli tässä mennään segfaultiksi. tid on int, basepx on int. Olen debugannut ja watchannut että rivix, tid ja basepx pysyvät rajojen sisällä, vaikka Sint16 riittääkin vähän pidemmillekin luvuille. Toimii kyllä joissakin tilanteissa täysin oikein, ja sitten jonkin muutoksen tehtyäni onkin taas aivan päin mäntyjä. Kerrassaan mielenkiintoista. Hmmh.
Edit: Paska. Topikki jäi puolieditoiduksi.
Jos käytät osoitinta tuolla tavalla, page fault tulee varmana ennemmin tai myöhemmin. Pointterille pitää (melkein) aina varata tilaa; tässä tapauksessa menisi varmaan helpommin varata rakenne normaalina ja laittaa sitten niihin SDL:n funktioihin parametriksi rakenteen osoite:
int rivix = tid * basepx + 1; SDL_Rect tilecoords; tilecoords.x = rivix; tilecoords.y = 1; // Muuttaos sitten parametri osoitteeksi &-operaattorilla: SDL_FillRect(screen, &tilecoords, SDL_MapRGB(screen->format, 255, 0, 0));
Outoa. SDL:n helpeissä ei pahemmin tätäkään osoitustapaa kommentoida. Siis tämähän toki toimii, mutta luulin että siinä on joku kieroutunut muistinhallinta takana.
Aihe on jo aika vanha, joten et voi enää vastata siihen.