|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6319
|
[C] Ritorno di puntatori
Ciao a tutti,
ho un vuoto di memoria nel C nelle funzioni che ritornano puntatori Immagino che fare così sia scorretto: Codice:
int*func(){
int var = 3;
int*var_p = &var;
return var_p
}
Così invece dovrebbe essere corretto: Codice:
int*func(){
int*vect=malloc(100*sizeof(int));
return vect
}
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
Codice:
int*func(){
int*vect=malloc(100*sizeof(int));
return vect
}
La variabile vect invece in func verrà eliminata perchè è una variabile automatica allocata sullo Stack. Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6319
|
Ok, perfetto.
Ma se volessi allocare una variabile nello heap, l'unico modo è farlo con una malloc? Oppure ci sono altri modi? Se la funzione sopra dovesse ritornare un solo elemento, dovrei fare una malloc di un solo int? Supponendo di non voler fare la copia per valore. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
Per allocare un solo int il comando è ovviamente "malloc(sizeof(int))". Ci sarebbe un altro modo per fare quello che hai descritto che ha l'unico problema di non essere thread safe e sarebbe quello di creare nella funzione una variabile di tipo static e ritornare un puntatore a quella : Codice:
int* func(){
static int var;
return &var
}
Come ho detto questa soluzione però non è thread safe, in quanto la variabile è sempre la stessa ad ogni chiamata di func() (il puntatore non cambierà mai) quindi se due thread accedono contemporaneamente alla variabile ritornata da func() di fatto accedono alla stessa variabile e ci potrebbero essere problemi di concorrenza. Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:02.




















