[ SuperC @ 18.01.2007. 20:48 ] @
Zanima me sljedece:

zasto je u prvom primjeru, na pitanje koliko se po jednom pozivu funkcije test, netocno daje/oslobadja Byte-a, kao tacan odgovor navodi 4 Bytes, a drugom na isto pitanje kao tacan odgovor navodi 8 Bytes. Evo primjera:

Primjer1:

Code:
void test()
{
int *x;
for (int i=1; i<3; i++)
x= new int [i];

delete [] x;
}



Primjer2:

Code:
void test()
{
int *x;
for (int i=2; i>0; i--)
x= new int [i];

delete [] x;
}


[Ovu poruku je menjao SuperC dana 18.01.2007. u 23:52 GMT+1]

[Ovu poruku je menjao SuperC dana 18.01.2007. u 23:52 GMT+1]
[ Mali Misha @ 18.01.2007. 21:15 ] @
Primer 1:
i=1: pravi niz od 1 int (pokazivač na njega biva izgubljen)
i=2: pravi niz od 2 int
i=3: break

neoslobođeno u toku programa: 1 int = 4 bytes, uglavnom

Primer 2:
i=2: pravi niz od 2 int (pokazivač na njega biva izgubljen)
i=1: pravi niz od 1 int
i=0: brek

neoslobođeno u toku programa: 2 int = 8 bytes, uglavnom
[ SuperC @ 18.01.2007. 21:24 ] @
arhg !?@#$%^ (do mene)

hvala puno :)

znaci, potrebno je pogledati koja je vrijednost niza i pomnoziti je, ja sam mislio da se iste vrijednosti dodjeljuju po jednoj petlji, a zapravo se funkcija test poziva samo jednom

a sta se desava, kada u zadatku nije niz, npr:

Code:

void test ()
{
int *x;
for (int i=0, i<3; i++){
x = new int;
delete x;
}
}


da li ce ovdje zato sto je nula biti rjesenje nula BYtes?
[ Mali Misha @ 18.01.2007. 21:31 ] @
Za razliku od new int[...] koji pravi novi niz, new int pravi samo jedan element i vraća pokazivač na njega. Primeti i razliku kod brisanja:

delete [] x; -- se koristi kada x pokazuje na niz (pa i kada mu je dužina 1)
delete x; -- se koristi kada x pokazuje na jedan element

Znači ovde će biti napravljeno

(n = broj prolazaka kroz petlju) x (1 element)

a program oslobađa samo poslednji napravljeni. Znači ostaje n-1 neoslobođenih int.
[ SuperC @ 18.01.2007. 21:50 ] @
Ok. Misha, ti bi trebao biti profesor :)

Imam jos jedno pitanje, da li ovaj zadatak rjesavam kao rekurziju:

Code:

#include <iostream.h>
void main () {
int *ptr = new int [10];

for (int i=0; i<10; i++)
ptr [i] = i;

int *ip = ptr+9;

for (int i=0; i<10; i++)
cout << *ip--;

delete [] ptr;
}


odnosno prvo rjesenje mi je 0+9, zatim sta? dodjem na 10?!
[ lucky @ 19.01.2007. 03:04 ] @
Niej ovo rekurzija i ne dodjes na 10!
Pokreni program pa ces i sam videti. ip ti zapravo pokazuje na ptr[9] i onda sa *ip-- u petlji stampas vrednosti niza od p[9] do p[0]. Znaci u obrnutom poretku u odnosu na onaj u kome su unete.
[ SuperC @ 19.01.2007. 06:25 ] @
to sam mislio, samo sam se lose izrazio, znaci prvo ih unesem, u jednom redoslijedu i onda u obrnutom odstampam.

Moj program izbaci samo gotovo rjesenje. ne i korake. :(
[ X Files @ 19.01.2007. 07:18 ] @
Citat:

...
#include <iostream.h>
...

Kad smo već kod ovoga, pogledaj ovde:
http://www.elitesecurity.org/t236691-0#1418274
(EDIT: Link koji valjda sada radi. Hvala Mali Misha)


[Ovu poruku je menjao X Files dana 19.01.2007. u 16:13 GMT+1]