Je to spravne – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Je to spravne – C / C++ – Fórum – Programujte.comJe to spravne – C / C++ – Fórum – Programujte.com

 

janek
~ Anonymní uživatel
56 příspěvků
2. 5. 2010   #1
-
0
-



int& pokus()
{
int* help = new int(25);
return *help;
}

int main()
{
int variable;
variable = pokus;
cout << variable << endl;
cin >> variable; // for windows
}

v fci. pokus vytvorim v volne pameti int s value 25, vratim ji jako odkaz a vypisu hodnotu .... Je to spravne?? Muzu takto vratit *help, nebo dojde k uniku pameti a hodnota zustava jenom nahodne ??

Nahlásit jako SPAM
IP: 85.92.39.–
SeraphCZ0
Stálý člen
2. 5. 2010   #2
-
0
-

No můžeš to takhle vrátit. Mě se to zdá naprosto v pořádku.

Nahlásit jako SPAM
IP: 85.71.98.–
KIIV
~ Moderátor
+43
God of flame
2. 5. 2010   #3
-
0
-

zaprve: variable = pokus; musi byt variable = pokus();

EDIT: uprava:

je to memory leak.. vratis jen hodnotu pomoci return *test; ale pointer nikde neodstranis

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
janek
~ Anonymní uživatel
56 příspěvků
2. 5. 2010   #4
-
0
-

To KIIV :
jasne, u pokus() jsem ty zav zapomel ...
takze s variable zachazim jako s normalnim ukazatelem ??

Nahlásit jako SPAM
IP: 85.92.39.–
KIIV
~ Moderátor
+43
God of flame
2. 5. 2010   #5
-
0
-

To janek : viz oprava predchoziho prispevku.. sem si toho vsiml az kdyz sem si to znova prochazel :)

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
janek
~ Anonymní uživatel
56 příspěvků
2. 5. 2010   #6
-
0
-

diky moc, :)

Nahlásit jako SPAM
IP: 85.92.39.–
Palmik0
Super člen
2. 5. 2010   #7
-
0
-

janek napsal:



int& pokus()
{
int* help = new int(25);
return *help;
}

int main()
{
int variable;
variable = pokus;
cout << variable << endl;
cin >> variable; // for windows
}

v fci. pokus vytvorim v volne pameti int s value 25, vratim ji jako odkaz a vypisu hodnotu .... Je to spravne?? Muzu takto vratit *help, nebo dojde k uniku pameti a hodnota zustava jenom nahodne ??



No, trošku mi to zpočátku zamotalo hlavu... s varibale nemůžeš zacházet jako s ukazatelem, pokus() vrací refrenci na int, nikoliv ukazatel. Upřímně, taková funkce mi vůbec nedává smysl (Edit: ne v tomto a většině dalších případů, smysl to dává při přetížení operátoru [] kdy chceš mít možnost upravovat hodnoty objektů uvnitř objektu viz http://www.parashift.com/c++-faq-lite/references.html)... Buď bych vracel společně s referencí i ukazatel, nebo pouze ukazatel (což by asi bylo nejlepší, když nepočítám možnost vracet obyčejně hodnotu), abych mohl vždy paměť uvolnit, případně, pokud to chceš zachovat, nebo zjistit, jak to skutečně uvolnit, udělal bych to takto (pro potřeby testování jsem si příklad upravil).
int& foo(int value)

{
int* help = new int(value);
return *help;
}

int main()
{
int& variable1 = foo(1);
int& variable2 = foo(2);

std::cout << variable1 << ", " << variable2 << std::endl;

delete &variable1;
delete &variable2;

return 0;
}

Nahlásit jako SPAM
IP: 85.207.177.–
Yesterday is history. Tomorrow is a mystery. Today is a gift and that is why it's called the present.
janek
~ Anonymní uživatel
56 příspěvků
2. 5. 2010   #8
-
0
-

ok. to je celkem komplikovane :) ... udelat to asi normalne pres hodnotu ...

Nahlásit jako SPAM
IP: 85.92.39.–
AdamHlavatovic0
Stálý člen
2. 5. 2010   #9
-
0
-

> Je to spravne?? Muzu takto vratit *help, nebo dojde k uniku pameti ...
Po volani pokus()

int variable;

variable = pokus();

dojde k uniku pameti alokovanej v pokus() operatorom new. Hodnota premennej variable bude 25, pretoze sa do variable skopiruje s navratovej hodnoty funkcie pokus().

Nahlásit jako SPAM
IP: 94.229.32.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 69 hostů

Podobná vlákna

Je to spravne ? — založil koudis

Please , je toto spravne ? — založil krang

Mam to spravne? — založil wrany

Správné uložení formátu — založil milanmichal

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý