Kääntäjän bugiko?

ihmettelevä_testailija

Eli minulla on seuraavanlainen metodi:

procedure TForm1.Test(ASrc : Integer; ASrc2 : Integer);
var
P : PByte;
begin
P := @ASrc; // P = 0x12F5BC
ShowMessage(IntToStr(Integer((P^))));

Dec(P, 4); // P = 0x12F5B8

//P := @ASrc2; // P = 0x12F5B8

// Näyttää väärän arvon kun Dec käytössä vaikka
// Osoite on sama kuin suoralla sijoituksella, miksi, eli kun käytän suoraa sijoitusta (kommentoitu) tuo näyttää oikein?
ShowMessage(IntToStr(Integer((P^))));
end;

En ymmärrä miksi tuo näyttää tuon viimeisen arvon päin mäntyä, kutsu on seuraavanlainen:
Test(5,8);

Delphi on CodeGear™ Delphi® 2007 for Win32® R2 Version 11.0.2804.9245

5

953

    Vastaukset 5

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • hemmoit

      Jäi vähän epäselväksi mikä on ko koodin tarkoitus...

      Mutta miksi PByte (Osoitin 8 bittiseen arvoon) 32 bittiselle integerille ? eikö PInteger ole olemassa...

      Haluatko nyt lisätä ASrc arvoon 4, vai yritätkö saada selville ASrc2:sen osoiteen pinossa (joka olisi kikkaillua) ?

      • Ihmettelevä_testailija

        Joo, tosiaan tarkoitus oli saada selville tuon pinon logiikka/arvot, aloittelija kun olen, osaatko siis kertoa tarkemmin kuinka tuon teen, teoria on kyllä hallussa, mutta eipä tuo käytäntö oikein. Eikö tavu pointteri tuossa ole ihan ok?


      • öty-
        Ihmettelevä_testailija kirjoitti:

        Joo, tosiaan tarkoitus oli saada selville tuon pinon logiikka/arvot, aloittelija kun olen, osaatko siis kertoa tarkemmin kuinka tuon teen, teoria on kyllä hallussa, mutta eipä tuo käytäntö oikein. Eikö tavu pointteri tuossa ole ihan ok?

        Dec(P, 8) ... Taitaa olla 64 bittinen voit tietenkin käyttää tavupointteria mutta jos laitat 255 suuremman luvun niin huomaat mitä tapahtuu, jos taas "P:Pinteger" niin pitää olla Dec(P,2) eli vähennetään 2 integeriä Kokeile myös "pointer" ja "PWord"


    • Anonyymi00004

      On hieman epäselvää, MITÄ haluat tuolla ShowMessagella näyttää.

      Mutta:

      ShowMessage(IntToStr(Integer((P^))));

      Koska tuon sisimmäinen osa on Integer((P^)), niin tuo näyttää ARVOn, johon P osoittaa.

      Jos haluaisit näyttää muistiosoitteen, johon P osoittaa, niin:

      1) Silloin tuon pitäisi sensijaan olla Integer((P)) - tosin sillä saisit tulostettua tuon muistiosoitteen 10-järjestelmän numerona.

      Siksi:

      2) Jos haluat muistiosoitteen heksadesmiaalimuodossa, tuo pitäisi muuttaa näin:

      ShowMessage( '$' + IntToHex(Integer(P), 8) );


      Lisäksi: Ylläoleva on oikein, kun kyseessä on 32 -Bittinen ohjelma.

      Jos olisi 64 -Bittinen ohjelma, niin vaatisi muutamia muutoksia, koska silloin myös muistiosoitteet olisivat 64 -Bittisiä sen sijaan että ne ovat 32 -Bittisiä 32 -Bittisisissä ohjelmissa.

      Debuggerilla (Delphi 7) nuo osoitteet saa näkyviin:

      View / Debug Windows / CPU

      CPU -rekisterien alapuolella näkyy pinomuistialue, ja sitä voi vierittää rullauspalkilla.

      • Anonyymi00005

        Onnea vaan yritykselle tavoittaa aloittaja 17 vuoden jälkeen..


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. 158
      1655
    2. Onko kaivattusi seksipommi?

      Minun kaivattuni on😅😍
      Ikävä
      73
      1180
    3. Hyvää yötä kivalle miehelle!

      Samasta kylästä! 😊
      Ikävä
      113
      878
    4. Realistisesti

      Miten toivoisit, että asiat etenisivät hänen kanssaan? Kuka tekisi mitä?
      Ikävä
      93
      770
    5. Oletkohan tajunnut mitä olen päättänyt

      En tule koskaan, ikinä, sanomaan sinulle mitään, ei tervehtimistä, ei aloitetta, ei katsetta, ei mitään, koska et ole si
      Ikävä
      37
      557
    6. Minkälaista ajattelisit elämänne olevan

      jos olisit kaivattusi kanssa yhdessä?
      Ikävä
      51
      536
    7. Olen osastolla

      Henkisesti olen aivan rikki siitä mitä olen tehnyt. Lisäksi olen vakavasti sairas. Verikokeet kertoo sen.
      Ikävä
      33
      485
    8. Sinulle nainen

      Koitan vihdoin jättäytyä täältä pois. Taas koko illan tänne tullut vain jotain pilkkaus viestejä, ei jaksa tuollaista. M
      Ikävä
      74
      480
    9. Miksi et edistä asiaa...

      Kaivattusi suhteen??
      Ikävä
      37
      439
    10. Poistetut keskustelut

      Käsittelvät usein miesten asioita ja miehenä olemista. Kuten viimeksi poiston kohteeksi joutunut, Miesten tulee alkaa
      Sinkut
      132
      427
    Aihe