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
Kääntäjän bugiko?
5
943
Vastaukset
- 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
Joensuun kaupunki levittelee tonttitietoja Keskisuomalaiselle
Sähköposteja ja tonttitietoja levitellään mm. Pasi Koivumaalle273335Tiesitkö tätä ex-miehistä? Noriko Salo jysäytti yllätyspaljastuksen
Noriko Salo ja ex-F1 kuski Mika Salo olivat naimisissa v. 1999-2022. Kirsi Salon ex-mies puolestaan on muusikko Sammy A122479Kuka? Riehui valtuuston kokouksessa tänään ?
Onko puolangan puolesta porukkaa. Vaikuttaa siltä. Sairasta.902411Huh, huh! Sofia Belorf ei ole itse pessyt hiuksiaan kolmeen vuoteen
Sofia Belorf elää ökyelämää Dubaissa. Sofian arjessa kulta, raha ja luksus ovat vahvasti läsnä. Luksuselämään tottuneell1072104Toivoisitko Rakas vielä?
Haluaisitko vielä? Uskoisin osaavani näyttää sinulle, kuinka ainutlaatuinen nainen olet.761683Ihan pieni näkeminen vaan
👋 ja minä olisin valmis jo vaikka mihin sun kanssa. Nämä on näitä.. 🤫🫣😘💥481574Sointu Borg tilittää - Ei suostu enää tähän työhön: "Katastrofi"
Sointu Borg on mediapersoona, joka löi itsensä läpi Diili-realityssä. Borg on monipuolinen tekijä: mediapersoona, juonta261476Keskustelua kasteesta
You tubessa kaksi pappia keskustelivat kasteesta ja kritisoivat raamatullista uskovien kastetta. Toinen heistä yritti4001305- 1291217
Tulipalo viimeyönä
Olipa ikävä kuulla tämä tulipalo, nyt on jatkuvasti asuinpaloja.Grillikausi alkanut.Grillit pois parvekkeilta ja asuntoj151136