PDA

Visualizza la versione completa : [C++] Ritorno di un vettore in una funzione


Il Pazzo
17-05-2007, 11:42
int* fusione (int a[], int m, int b[], int n){
int i = 0;
int j = 0;
int k = 0;
int c[10];

while((i < m) && (j < n)){
if(a[i] < b[j]) c[k++] = a[i++];
else c[k++] = b[j++];
}

while (i < m) c[k++] = a[i++];
while(j < n) c[k++] = b[j++];

return c;
}

void main(){
int a[] = {1, 2, 3, 4, 8};
int b[] = {3, 5, 7, 9};
int *c;

c = fusione(a, 5, b, 4);

for(int i = 0; i < 10; i++)
cout<<c[i]<<" ";

}


Non funziona perch c locale e quindi nel momento in cui esco dalla funzione c smette di esistere?

oregon
17-05-2007, 11:46
Ovviamente ...

Il Pazzo
17-05-2007, 11:49
e boh... dunque che senso hanno i puntatori a funzione se poi devo dichiarare il vettore o quello che globalmente?

andbin
17-05-2007, 11:50
Originariamente inviato da Il Pazzo
Non funziona perch c locale e quindi nel momento in cui esco dalla funzione c smette di esistere? Certo! Hai 2 possibilit:
a) L'array di destinazione lo definisci nel chiamante (main nel tuo caso) e lo passi alla funzione che lo dovr riempire. In questo modo il chiamante che si deve preoccupare della allocazione dell'array.

b) L'array lo allochi dinamicamente nella funzione e fai ritornare al chiamante un puntatore. In questo modo la funzione che si preoccupa della allocazione.

Il Pazzo
17-05-2007, 11:53
Originariamente inviato da andbin
b) L'array lo allochi dinamicamente nella funzione e fai ritornare al chiamante un puntatore. In questo modo la funzione che si preoccupa della allocazione.

Ahh quindi se lo alloco dinamicamente il vettore, nel momento in cui esco dalla funzione in cui dichiarato, il vettore non smette di esistere... ho capito bene? (In questo caso avrei anche capito il senso dei puntatori a funzione allora)

andbin
17-05-2007, 11:56
Originariamente inviato da Il Pazzo
Ahh quindi se lo alloco dinamicamente il vettore, nel momento in cui esco dalla funzione in cui dichiarato, il vettore non smette di esistere... ho capito bene? S esatto. Un blocco di memoria allocato dinamicamente smette di esistere solo quando si fa una "free" esplicita (funzione free() se si usa malloc/calloc/realloc o 'delete' in C++ se si usa new).

oregon
17-05-2007, 11:57
Semplicemente perche' il vettore viene allocato dinamicamente nell'heap e non nello stack ...

Il Pazzo
17-05-2007, 11:58
ah si giusto vero... ok grazie....

bigmickey
17-05-2007, 12:34
Non ho capito il nesso con i puntatori a funzioni.

oregon
17-05-2007, 13:38
Originariamente inviato da bigmickey
Non ho capito il nesso con i puntatori a funzioni.

Non l'hai capito perche' non c'e' ...

Loading