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

Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.

[es] :: Art of Programming :: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.

[ Pregleda: 749 | Odgovora: 13 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedeljko
Nedeljko Stefanovic

Član broj: 314
Poruke: 2042
*.dynamic.sbb.rs.



Profil

icon Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.04.06.2008. u 08:31

Napisati funkciju bool dynamic(void*) takvu da,

1. Ako je p pokazivac na objekat dinamicki alociran, onda je dynamic(p)=true.
2. Ako je x staticka promenljiva ili promenljiva na steku, onda je dynamic(&x)=false.

Ja sam napisao sledecu funkciju:

Code:

bool dynamic(void *p) {
    char x;

    return p < &x;
}


Zasnovana je na pretpostavkama da:

1. Stek raste na dole.
2. Dinamicki alocirani objekti su na adresama ispod steka.

Valjda to garantuje POSIX standard, mada nisam siguran. Problem sa ovim resenjem je sto za pokazivac na staticku promenljivu vraca true umesto false.
Nedeljko Stefanovic
04.06.2008. u 08:31 

EArthquake
Aleksandar Nikolic
Novi Sad

Član broj: 20684
Poruke: 538
*.eunet.rs.

Sajt: www.phearless.org


Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.04.06.2008. u 17:21
pa u sustini trebalo bi da je tako ,

dinamicki alocirani delovi memorije su na heap-u , na linuxu je to oko 0x0804xxxx adresa


tako da bi to trebalo da radi
04.06.2008. u 17:21 

Nedeljko
Nedeljko Stefanovic

Član broj: 314
Poruke: 2042
*.dynamic.sbb.rs.



Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.05.06.2008. u 11:15
Rekoh, ovo resenje ne radi korektno sa statickim promenljivama.
Code:

#include <iostream>

using namespace std;

bool dynamic(void *p) {
    char x;

    return p < &x;
}

int main()
{
    static int x = 0;

    if (dynamic(&x))
        cout << "Promenljiva je dinamicka" << endl;
    else
        cout << "Promenljiva nije dinamicka" << endl;
}



Ovaj program ispisuje poruku "Promenljiva je dinamicka", sto je netacan rezultat.
Nedeljko Stefanovic
05.06.2008. u 11:15 

EArthquake
Aleksandar Nikolic
Novi Sad

Član broj: 20684
Poruke: 538
*.eunet.rs.

Sajt: www.phearless.org


Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.05.06.2008. u 17:44
e svasta , nisam ni video taj deo

naravno da ce biti tako , nisam se setio toga

pa , mozes da pogledas gde ti se krecu segmenti , u kojim adresama

posto ce dinamicke biti iskljucivo na heap-u , ostale u .bss , .data i sl , svaki od segmenata
ima odredjen raspon adresa koji zauzima,

e sad , dok nije bilo randomizaciju u kernelu sto se tice steka , biblioteka i sl

to si mogao da hardcodujes , tj adrese su bile stalne ,

sad bi verovatno morao da ih utvrdis po pokretanju programa ,

sto sumnjam da bi bilo tesko

da li se to pitanje odnosi iskljucivo za linux ili bi trebalo da radi univerzalno ?

pozdrav ,
Aca





[Ovu poruku je menjao EArthquake dana 05.06.2008. u 18:59 GMT+1]
05.06.2008. u 17:44 

Dragi Tata

Član broj: 1958
Poruke: 3883
*.microsoft.com.

Sajt: www.novetehnologije.com


Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.05.06.2008. u 18:08
Ukratko, ne može - bar ne na portabilan način.
05.06.2008. u 18:08 

EArthquake
Aleksandar Nikolic
Novi Sad

Član broj: 20684
Poruke: 538
*.eunet.rs.

Sajt: www.phearless.org


Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.05.06.2008. u 22:10
bas me bacilo u razmisljanje , ali izgleda da osim da , recimo , citas /proc/PID/maps pa da uporedjujes adrese segmenata
ne vidim drugo resenje

a to definitivno nije portabilno

na windowsu nemam pojma kako bi moglo
05.06.2008. u 22:10 

Nedeljko
Nedeljko Stefanovic

Član broj: 314
Poruke: 2042
*.dynamic.sbb.rs.



Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.06.06.2008. u 13:51
Pa, treba da radi minimum na Linux i Windows platformama. Da li mogu da pretpostavim da su staticke promenljive na adresama ispod heap-a, a lokalne iznad heap-a?
Nedeljko Stefanovic
06.06.2008. u 13:51 

jablan
Mladen Jablanović
Beograd

Član broj: 8286
Poruke: 3030
*.dynamic.sbb.rs.

Sajt: blog.radioni.ca


Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.06.06.2008. u 16:00
A za šta se ovo koristi?
06.06.2008. u 16:00 

masetrt
Marko Djurovic
Programer, Omni-Explorer
Beograd

Član broj: 3129
Poruke: 214
*.dynamic.sbb.rs.

Sajt: www.vast.com


Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.06.06.2008. u 19:48
Citat:
A za šta se ovo koristi?


Pravo pitanje je "Cemu ovo sluzi?". E onda neko moze da kaze "A uz to i ne radi". Ova ideja koju Nedeljko koristi je nekada davno i mogla da prodje, ali danas zaboravite na to.
His majesty Grand Duke of Shumadija and Western Pomoravlje
06.06.2008. u 19:48 

Nedeljko
Nedeljko Stefanovic

Član broj: 314
Poruke: 2042
195.222.97.*



Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.07.06.2008. u 20:47
Imam klasu koja treba u sebi da sadrži pokazivač na istream tako da iz nje čitam znakove, ali ne baš onako kako idu iz ulaznog toka, nego malo obrađene. Rado bih predao klasi pokazivač na tok i prepustio joj odgovornost za uništavanje objekta (da ja ne razmišljam o delete), ali šta ako joj poturim referencu na cin (standardni ulaz) ili neki drugi tok koji nije na heap-u? Destruktor klase mora da "zna" da ne sme da ga. No, rešio sam problem na drugi način.

Klasa ima bool polje destroyInput koje namešta konstruktor. Podrazumevani konstruktor namešta input na &cin i destroyInput na false. Konstruktor koji prihvata string fileName radi input = new ifstream(fileName.c_str()); destroyInput = true; a konstruktor koji prihvata referenci na istream usmerava input na njegovu adresu i stavlja destroyInput na false. Konstruktor kopije je privatan.
Nedeljko Stefanovic
07.06.2008. u 20:47 

mmix
Miljan Mitrovic
Software Architect
Pancevo, Srbija

Član broj: 17944
Poruke: 1682
195.252.78.*



Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.07.06.2008. u 21:11
Hmm, to mi deluje kao veoma los koncept, objekti i svi ostale heap strukture treba da budu unistavani u kontekstu u kom su kreirani. Sta ako ti objekat kojem si dao stream baci exception pre nego sto uradi delete? Kontekst koji je kreirao stream smatra da je problem resen a objekat ostade na heap-u, eto memory leak-a.
▪ The word 'politics' is derived from the word 'poly', meaning 'many', and the word 'ticks', meaning 'blood sucking parasites' - Larry Hardiman
▪ If the good guy gets the girl, it's rated PG; if the bad guy gets the girl, it's rated R; and if everybody gets the girl, it's rated X
▪ Illegal aliens have always been a problem in the United States. Ask any Native American
07.06.2008. u 21:11 

Nedeljko
Nedeljko Stefanovic

Član broj: 314
Poruke: 2042
195.222.97.*



Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.08.06.2008. u 17:12
Citat:
mmix: Hmm, to mi deluje kao veoma los koncept, objekti i svi ostale heap strukture treba da budu unistavani u kontekstu u kom su kreirani.


Pa upravo se to i postize.

1. Ako predajem kreirani tok klasi, klasa nije odgovorna za unistavanje toka.
2. Ako tok treba da bude fajl, konstruktoru se predaje samo ime fajla, klasa kreira tok i unistava ga.
3. Ako je primenjen podrazumevani konstruktor, onda se koristi standardni ulaz cin i klasa nece pokusati da ga unistava.
Nedeljko Stefanovic
08.06.2008. u 17:12 

mmix
Miljan Mitrovic
Software Architect
Pancevo, Srbija

Član broj: 17944
Poruke: 1682
195.252.78.*



Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.08.06.2008. u 17:54
Moj komentar je bio na tvoj prvobitni plan da selektivno unistavas stream koji ti je prosledjen unutar klase.
▪ The word 'politics' is derived from the word 'poly', meaning 'many', and the word 'ticks', meaning 'blood sucking parasites' - Larry Hardiman
▪ If the good guy gets the girl, it's rated PG; if the bad guy gets the girl, it's rated R; and if everybody gets the girl, it's rated X
▪ Illegal aliens have always been a problem in the United States. Ask any Native American
08.06.2008. u 17:54 

Nedeljko
Nedeljko Stefanovic

Član broj: 314
Poruke: 2042
*.dynamic.sbb.rs.



Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.09.06.2008. u 08:10
Pa, i tada sam hteo da sve što ja kreiram bude na heap-u, a ostalo ionako nije na njemu.
Nedeljko Stefanovic
09.06.2008. u 08:10 

[es] :: Art of Programming :: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.

[ Pregleda: 749 | Odgovora: 13 ]

Postavi temu Odgovori

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