Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pointeri i memorija

[es] :: C/C++ programiranje :: Pointeri i memorija

[ Pregleda: 2609 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ivan Vasić

Član broj: 14756
Poruke: 631
*.41.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Pointeri i memorija25.12.2003. u 18:45 - pre 247 meseci
Ako je *pi pokazivac na integer-e i dodelim mu memoriju
pi=malloc(n*sizeof(int));

da li je moguce naci broj 'n' ako on nije poznat tj. pretpostavimo da imam taj *pi kome je dodeljena nepoznata velicina memorije i želim da znam koliko
integer-a on sadrži ->
onda bi taj broj našao kao n= (velicina*pi)/sizeof(int) . Jel moguce ovo ?
Ako jeste onda je pitanje kako da nadjem (velicina(*pi)) ??

Naravno uz pretpostavku da je pokazivacu regularno dodeljena memorija kao što sam gore naveo.
U pitanju je 'C'.
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.beograd-3.tehnicom.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: Pointeri i memorija25.12.2003. u 19:59 - pre 247 meseci
ne broj 'n' nije moguce naci. jedina varijanta koja bi mogla da "prodje" da se radi o poracima tipa char. i da je poslednji znak '\0' tada bi nesto moglo da se proracuna mada i to je opet pitanje da li je to sve.

 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16687
*.dip.t-dialin.net



+7177 Profil

icon Re: Pointeri i memorija25.12.2003. u 20:20 - pre 247 meseci
Pa mozes da probas da citas sve pi++ sve dok ne uhvatis memory exception :) Nije bas pouzdano - ali moze da posluzi :)))


DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.attbi.cable.earthlink.net



+18 Profil

icon Re: Pointeri i memorija25.12.2003. u 20:28 - pre 247 meseci
Ako koristis Microsoftov CRT, pogledaj _msize funkciju. _msize vraca velicinu odredjenog memorijskog bloka:

Code:
size_t _msize(
   void *memblock 
);
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.oak.inreach.net



+1001 Profil

icon Re: Pointeri i memorija25.12.2003. u 22:32 - pre 247 meseci
Za programera pointer je jedna jedina promenljiva koja sadrzi adresu neke druge
memorijske lokacije.

Za kompajler, medjutim, pointer je uvek neka struktura (ili objekat) koja osim same
adrese mora da sadrzi i ostale vitalne podatke, kao sto su naprimer sizeof() tipa
na koji pointer pokazuje. Bez te informacije, kompajler ne bi mogao da obavi prostu
pointersku aritmetiku tipa ptr++ ili ptr+=2;

Posto je layout takvih struktura stvar odluke coveka koji pise kompajler, razni kompajleri imaju razne nacine kako vode knjigovodstvo vezano za pointere.

Ja konkretno znam da ti kazem kako se moze otkriti podatak koji trazis u VisualStudio okruzenju:

Ako pointer ptr trenutno sadrzi adresu 0x1234ABCD, onda se na adresi manjoj za
0x10 (u ovom slucaju 0x1234ABBD) nalazi int promenljiva koja sadrzi tacan broj
byte-ova dodeljenih pointeru prilikom dinamicke alokacije memorije.

Dakle:
int nKolikoBajtovaJeAlocirano = *((int*)((int)ptr - 0x10)); // u VisualStudio-u

Za druge kompajlere sacekaj priloge drugih posetilaca.
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.attbi.cable.earthlink.net



+18 Profil

icon Re: Pointeri i memorija25.12.2003. u 23:12 - pre 247 meseci
milanche, to je domisljat ali vrlo los nacin da se ovo uradi iz prostog razloga sto to zavisi od verzije CRTa koju koristis. Mnogo je bolje da koristis _msize (vidi moj post gore), kada vec pricamo o Microsoftovim kompajlerima.
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.oak.inreach.net



+1001 Profil

icon Re: Pointeri i memorija26.12.2003. u 05:33 - pre 247 meseci
Relja,

hvala na ispravci. Pripremljen post mi je stajao par sati otkucan na masini pre nego
sto sam ga poslao, tako da nisam video tvoj post.
 
Odgovor na temu

Ivan Vasić

Član broj: 14756
Poruke: 631
*.7.EUnet.yu

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Pointeri i memorija26.12.2003. u 11:34 - pre 247 meseci
Hvala na odgovorima ! Nešto od ovoga će sigurno da upali - probaću što pre.
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.cmu.carnet.hr



Profil

icon Re: Pointeri i memorija26.12.2003. u 18:05 - pre 247 meseci
Pogledaj i HeapSize API na win32. Trebat ce ti i heap handle (u tvom slucaj od CRT), a njega mozes naci preko recimo handle viewera od sysinternalsa.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Pointeri i memorija19.03.2004. u 19:07 - pre 244 meseci
_msize (i HeapSize) lepo radi kad se memorija alocira sa malloc. Međutim, kad se koristi new[] ne radi. Zna li kogod kako da se vidi veličina bloka alociranog sa new[] ?
 
Odgovor na temu

[es] :: C/C++ programiranje :: Pointeri i memorija

[ Pregleda: 2609 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.