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: 4278 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedeljko
Nedeljko Stefanović

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



+2789 Profil

icon Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.04.06.2008. u 08:31 - pre 193 meseci
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.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

EArthquake

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



+67 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.04.06.2008. u 17:21 - pre 193 meseci
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
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

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



+2789 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.05.06.2008. u 11:15 - pre 193 meseci
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.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

EArthquake

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



+67 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.05.06.2008. u 17:44 - pre 193 meseci
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]
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

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



+6 Profil

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

EArthquake

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



+67 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.05.06.2008. u 22:10 - pre 193 meseci
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
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

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



+2789 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.06.06.2008. u 13:51 - pre 193 meseci
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?
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

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

masetrt
Marko Djurovic
Programer, Omni-Explorer
Beograd

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

Sajt: www.vast.com


+2 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.06.06.2008. u 19:48 - pre 193 meseci
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
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
195.222.97.*



+2789 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.07.06.2008. u 20:47 - pre 193 meseci
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.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.07.06.2008. u 21:11 - pre 193 meseci
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.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
195.222.97.*



+2789 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.08.06.2008. u 17:12 - pre 193 meseci
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.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.08.06.2008. u 17:54 - pre 193 meseci
Moj komentar je bio na tvoj prvobitni plan da selektivno unistavas stream koji ti je prosledjen unutar klase.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

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



+2789 Profil

icon Re: Kako utvrditi da li dati pokazivac pokazuje na dinamicki alocirani objekat.09.06.2008. u 08:10 - pre 193 meseci
Pa, i tada sam hteo da sve što ja kreiram bude na heap-u, a ostalo ionako nije na njemu.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

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

[ Pregleda: 4278 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

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