Mikäs tässä oikein mättää ?
char **msg = NULL;
fin.read((char*)&this->m_numofmessages,sizeof(this->m_numofmessages));
if(this->m_numofmessages > 0){
this->m_messageheader = new MESSAGE_HEADER[m_numofmessages];
msg =(char**) new char[m_numofmessages];
if(!m_messageheader || !msg ){
fin.close();
if(msg) delete [] msg;
if(this->m_messageheader)
delete [] this->m_messageheader;
return -1;
}
// read header information
short i;
for(i=0; i < this->m_numofmessages ; i ) {
fin.read((char*)&m_messageheader[i],
sizeof(MESSAGE_HEADER));
msg[i] = (char*) new char[m_messageheader[i].m_lenghtofmessage 1];
}
// read message bodies
for(i=0; i < this->m_numofmessages ; i ) {
fin.read((char*)msg[i],m_messageheader[i].m_lenghtofmessage);
msg[i][m_messageheader[i].m_lenghtofmessage] = '\0';
}
}
Pyhä sylvi tänne on vaikee pastee ja muokkaa tota jos tossa on 'typoja' niin ne johtuu tästä, kääntäjä päästää virheettä läpi:(
Mutta itse ongelmaan esimerkki tapauksessa on 65 messagea, mutta i=32 msg[i] ei toimi
Sitten muistin vapautus ei toiminut, kokeilin, että lataa vaa 30 viestiä.
// vapautus.
for(short i=0; i < this->m_numofmessages ; i )
delete [] msg[i];
delete [] msg;
kääntäjänä vs2003 console application.
Niin virhettä etsin, en vaihtoehtoista tapaa ;)
char **msg = NULL;
fin.read((char*)&this->m_numofmessages,sizeof(this->m_numofmessages));
if(this->m_numofmessages > 0){
this->m_messageheader = new MESSAGE_HEADER[m_numofmessages];
msg =(char**) new char[m_numofmessages];
if(!m_messageheader || !msg ){
fin.close();
if(msg) delete [] msg;
if(this->m_messageheader)
delete [] this->m_messageheader;
return -1;
}
// read header information
short i;
for(i=0; i < this->m_numofmessages ; i ) {
fin.read((char*)&m_messageheader[i],
sizeof(MESSAGE_HEADER));
msg[i] = (char*) new char[m_messageheader[i].m_lenghtofmessage 1];
}
// read message bodies
for(i=0; i < this->m_numofmessages ; i ) {
fin.read((char*)msg[i],m_messageheader[i].m_lenghtofmessage);
msg[i][m_messageheader[i].m_lenghtofmessage] = '\0';
}
}
Pyhä sylvi tänne on vaikee pastee ja muokkaa tota jos tossa on 'typoja' niin ne johtuu tästä, kääntäjä päästää virheettä läpi:(
Mutta itse ongelmaan esimerkki tapauksessa on 65 messagea, mutta i=32 msg[i] ei toimi
Sitten muistin vapautus ei toiminut, kokeilin, että lataa vaa 30 viestiä.
// vapautus.
for(short i=0; i < this->m_numofmessages ; i )
delete [] msg[i];
delete [] msg;
kääntäjänä vs2003 console application.
Niin virhettä etsin, en vaihtoehtoista tapaa ;)
Vastaukset 11
Vanhimmat
mitäs jos tekisit samma på c ja käyttäisit vaikka stl:n vectoria (koodisi oli niin hirveän näköistä että en edes jaksanut vilkaista, mutta jos joku toinen)
(koodisi oli niin hirveän näköistä että en edes jaksanut vilkaista, mutta jos joku toinen)
Hehe, kyseisellä tyylillä on kirjotettu usempikin peli. Kiitos kuitenkin tyhjästä, että vastasit.
Kuten sanottu, etsin virhettä, EN VAIHTOEHTOISTA TAPAA.
Kiva kuulla, että bugisella koodillakin saa pelejä aikaan. Onneksi ei mitään käyttöohjelmia. Niissä pitäisi joku laatutakuukin olla, ihmisten keskuudessa.
>>Kuten sanottu, etsin virhettä, EN VAIHTOEHTOISTA TAPAA.>>
Entä jos virhe on juuri siinä?
"Kiva kuulla, että bugisella koodillakin saa pelejä aikaan. Onneksi ei mitään käyttöohjelmia. "
käyttöohjelmia? missäs ei ole bugeja? ainakin Microsoftin "tuotokset" oikein pursuaa niitä pukeja! mitä ovat nämä sinun käyttöohjelmasi joita niin mainostat tuossa bugittomiksi? kiva ois tietää ne bugittomat mallit. ;D
kepillä jäätä..
"for(i=0; i < this->m_numofmessages ; i ) "
--> for(i=0; i < &this->m_numofmessages ; i )
???
> --> for(i=0; i < &this->m_numofmessages ; i )
En tietenkään halua viitata m_numofmessages muisti osoitteeseen...
Nyt haltuun noi * ja &.
Vai luetko jonkin ohjelman käyttämää binäärimuotoa ?
voisin arvata että m_messageheader luvussa jokin mättää, onko esim tavut oikein ?
C ajat ovat takana mutta eikös se näin mene ?
// vapautus.
for(short i=0; i < this->m_numofmessages ; i ) {
delete msg[i];
}
delete msg;
Jos C haluat käyttää seuraava olisi kätevämpää
stl::string msg;
fin >> m_numofmessages;
fin >> msg;
Tai sitten tutostu MFC:n CArchiveen, jos olet MS kääntäjä ympäristössä.
PS. Suositelisin käyttämään binäärin sijasta XML:ää.
http://sourceforge.net/projects/tinyxml
PS2.
Tuon **msg sijasta voit käyttää char *msg[]
> Vai luetko jonkin ohjelman käyttämää
> binäärimuotoa ?
Luen, vanhaa basickii.
> voisin arvata että m_messageheader luvussa jokin > mättää, onko esim tavut oikein ?
Lukee headerin oiken :)
(kävi kanssa mielessä)
> C ajat ovat takana mutta eikös se näin mene ?
> // vapautus.
> for(short i=0; i < this->m_numofmessages ; i ) > {
> delete msg[i];
> }
> delete msg;
Käyhän se noinkin, itse jätin vaan noi kaarisulut pois.
> Jos C haluat käyttää seuraava olisi kätevämpää
> stl::string msg;
> fin >> m_numofmessages;
> fin >> msg;
hmmm read 65/30 mitä ?
Ei toimi missään nimessä.
> Tai sitten tutostu MFC:n CArchiveen,
> jos olet MS kääntäjä ympäristössä.
MS ja MFC ei ole sama asia, console aplication ?
c/c ... ei mitää MFC/API32 jne.
> PS. Suositelisin käyttämään binäärin sijasta
> XML:ää.
Anteeksi kuinka ?
kuin voi joku luulla binääriä ja XML samaksi ?
vai putosinko nyt ihan rattailta.
Toinen on teksti-tiedosto toinen on konekielinen tiedosto ? wtf.
> http://sourceforge.net/projects/tinyxml
Voi tunkee mun 0x80...
"Luen, vanhaa basickii. "
Mikä basic, ja mistä löytyy tuon muodon kuvaus.
Oletko varma ettät MESSAGE_HEADER vastaa täysin binääriä, nyky kääntäjät nimittäin lisäävät tavuja rakenteisiin nopeamman koodin toivossa, eli voi olla mahdollista että olet lukenut muutaman tavun liikaa lopusta (ellet sitten ole ottanut pakkausta pois), jolloin näytää että kaikki olisi kunnossa. Tuollaiset jutut kannataa tehdä tavu/tavut kerrallaan.
"kuin voi joku luulla binääriä ja XML samaksi ?
vai putosinko nyt ihan rattailta. "
Ajoin takaa sitä että että jos kyseessä olisi ollut oma muoto se kannataa tehdä xml:llä, xml on joustavampi kuin binääri ja helpompi parsia.
"Toinen on teksti-tiedosto toinen on konekielinen tiedosto ? wtf. "
Yrität parsia jotain x86 exe filua ? täh
jos kertoisit mitä edes yrität tehdä ja vähän muutenkin valaisisit asiaa niin ei tarvitsisi arvailla. pelkkä mystinen koodinpätkä ja mikseitoimikysymys ovat harvinaisen hankalia vastata. ;)
Se mystinen koodin pätkä pitäis kertoo kaiken oleellisen.
Mutta homma menee näin.
On tiedosto basicillä tehty binääri.
Sitä luetaan, kärjestys ranskalaisittain.
- Montako viestiä.
Sit header pätkä
- Viestin alkukohta viestissä, FP
- montako merkkiä viestissä, ilman lopetusmerkkiä.
ja viimisiksi... laitetaan viestit oikeisiin kohtiin.
Miksi homma toimii aina 31 viestiin saakka.
32 = NULL.
30 viestii printattuu asia selvä.
32:des viesti... vituiks kun NULL.
yhteensä yli 60 viestiä.
Mikä tekee tuosta 32 taikaluvun tässä tapauksessa
ehkä tarkka silmäinen huomaa, että helvetti sehän on kahenpotenssi. 2-4-8-16-32.....