PDA

Visualizza la versione completa : [c++] puntatori a array e comando new


nik600
16-05-2003, 21:24
ciao a tutti qualcuno mi aiuta a capire sto pezzo di codice?


int* somma(int* v1,int* v2,int dim)
{

int *res;

res=new int[dim];

for(int i=0;i<dim;i++)
{

res[i]=v1[i]+v2[i];
}

return res;
}



allora la funzione somma prende:
l'indirizzo del primo array

l'indirizzo del secondo array

il valore di una variabile di tipo int

viene creato un puntatore res che uguale a...

e qui mi inkiodo...:dhò:

cosa vuol dire new int [dim]

e cosa "ritorna " la funzione con il comando return res?

ciao a tutti

Michele Facchin
16-05-2003, 21:56
int * res = new int [dim];


Con questo comando estrai dalla memoria heap l'area necessaria per contenere uno spazio di 2 * dim byte (se un intero vale 2 byte), ed assegni a res l'indirizzo del primo di questi.
In sostanza richiedi spazio per contenere dim numeri interi, cio crei un array dinamico di dim elementi interi.

La funzione somma restituisce il primo indirizzo di questo vettore creato nel heap, il quale risiede nella variabile locale (res).

Trader
17-05-2003, 01:36
La spiegazione di Michele e' chiara e perfetta.

Solo un annotazione al programma:
ogni volta che la funzione somma() viene chiamata, viene allocato uno spazio di memoria pari a 2*dim byte.
E' importante rilasciate tale area di memoria prima di terminare la chiamata della funzione, in caso contrario, effettuando molteplici chiamate alla funzione somma() si rischia di esaurire tutta la memoria heap disponibile.
( si continua ad allocare memoria, ma non si libera mai....).
In questo caso, alla fine del programma, aggiungi l'istuzione:

delete []res;

Ciao

nik600
17-05-2003, 08:20
molto chiari entrambi!

ciao !

Loading