Dynaaminen kaksiulotteinen taulukko

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 ;)
11993
Äänestä

Muut lukivat myös

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)

Äänestä
  • (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.

    Äänestä

  • dippadaa kirjoitti:

    (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ä?

    Äänestä

  • Virhe onkin kirjoitti:

    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

    Äänestä

kepillä jäätä..

"for(i=0; i < this->m_numofmessages ; i ) "
--> for(i=0; i < &this->m_numofmessages ; i )

???

Äänestä
  • > --> for(i=0; i < &this->m_numofmessages ; i )

    En tietenkään halua viitata m_numofmessages muisti osoitteeseen...

    Nyt haltuun noi * ja &.

    Äänestä

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[]

Äänestä
  • > 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...

    Äänestä

  • dippadaa kirjoitti:

    > 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

    Äänestä

  • le coder kirjoitti:

    "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. ;)

    Äänestä

  • helpottaisi huomattavasti kirjoitti:

    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.....

    Äänestä

Kommentoi aloitusta


dippadaa kirjoitti:

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 ;)

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu