Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Ongelmia rakenteen koon kanssa

sqwiik [06.12.2003 21:54:46]

#

Varaan muistia rakenteen (struct) käyttämiseen. Miten saan sen koon (tavuissa) selville? sizeof()-funktio hämää rutkasti, se palauttaa char:n kooksi 1 (kuten pitääkin), mutta miksi se palauttaa int:in kooksi 4 tavua? Rakenteen, jossa on yksi int ja yksi char, kooksi se ilmoittaa 8 tavua.

Mitä *SENSUROITU* tämä meinaa?

thefox [06.12.2003 22:18:08]

#

Ehkäpä kääntäjässäsi on int on 4 tavuinen? :-) Näin taitaa olla lähes kaikissa 32-bittisissä, kuten DJGPP jota ilmeisesti käytät. Rakenne on alignoitu tehokkuussyistä 8-tavuiseksi. Uskon että DJGPP:stä löytyy joku taikasana (tai kääntäjän vipu) jolla tuon alignoimisen saa kytkettyä pois.

sqwiik [06.12.2003 22:54:40]

#

No olkoon. Seuraava kohta bugaa ankarasti:

Hero_Spells[x] = (struct SPELL_hold *)malloc(sizeof(SPELL_hold) * get_max_spell(sp));

Eli yritän varata jokaiselle sankarihahmolle x tietyn määrän SPELL_hold-tyyppisiä rakenteita (tietty määrä = loitsujen max. määrä), ja kun rakenteen dataa muutetaan myöhemmin niin se aiheuttaa ongelmia. Muistin varaus kuitenkin onnistuu :)

Hero_Spells on määritetty:

struct SPELL_hold *Hero_Spells[MAX_HEROES];

sqwiik [07.12.2003 12:23:37]

#

Ahh.. Ei tarvitse enää apua. Sain ratkaistua.

bob [22.12.2003 13:16:23]

#

char + int struktuurista tulee 8 tavua koska kääntäjä alignaa 4:ään tavuun eli

struktuuri:
- int 4 tavua
- char 1 tavu
- 3 tavua tyhjää

tämä nopeuttaa muistinkäsittelyä varsinkin joukoissa huomattavasti x86 koneilla

ja int on näköjään kääntäjällä 32:n bitin word

Vastaus

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

Tietoa sivustosta