Restituisce un puntatore di una variabile locale C ++

Devo creare una funzione che restituisca un puntatore a un int.

Così:

int * count() { int myInt = 5; int * const p = &myInt; return p; } 

Poiché un puntatore è semplicemente un indirizzo e la variabile myInt viene distrutta dopo che questa funzione è stata chiamata. Come posso dichiarare un int all’interno di questo metodo che manterrà un posto nella memoria per consentirmi di accedervi in ​​seguito tramite il puntatore restituito? So che potrei dichiarare l’int globalmente al di fuori della funzione, ma voglio dichiararlo all’interno della funzione.

Grazie in anticipo per qualsiasi aiuto!

Usa il nuovo operatore

 int * count() { int myInt = 5; int * p = new int; *p = myInt; return p; } 

Come sottolineato in altre risposte, questa è generalmente una ctriggers idea. Se devi farlo in questo modo, forse puoi usare un puntatore intelligente. Vedi questa domanda per come fare Cosa è un puntatore intelligente e quando dovrei usarne uno?

Potresti usare puntatori intelligenti.

Per esempio:

 unique_ptr count() { unique_ptr value(new int(5)); return value; } 

Quindi puoi accedere all’intero come segue:

 cout << "Value is " << *count() << endl; 

Puoi farlo rendendo la variabile static :

 int* count() { static int myInt = 5; return &myInt; } 

È un errore restituire un puntatore a una variabile locale. x indica una variabile allocata nello heap:

 link x = new node(a[m]); Thus x isn't pointing to a local variable. 

Il motivo per cui restituire un puntatore a una variabile locale è un errore è che tale variabile esiste solo fino a quando la funzione è triggers (ad esempio, se viene inserita e chiusa). Le variabili allocate nello heap (ad es. Con l’uso del nuovo operatore) esistono finché non vengono deallocate (ad es. Con l’operatore delete).

Se vuoi restituire correttamente un puntatore di una variabile devi fare qualcosa di simile.

int * myInt = new int(5);

Questa non è una variabile locale BTW, il che significa che non ha memoria automatica e devi delete la memoria tu stesso

Tuttavia, l’uso di puntatori come questo è generalmente inutile e sconsigliato. È meglio creare un int al di fuori della funzione e fare in modo che la funzione faccia riferimento.

 void count(int & i) { i = 5; } 

BTW Non so come pensi di usare la variabile, ma dato che hai anche suggerito di usare una variabile globale potresti voler usare una variabile static che @JonathanPotter ha suggerito per prima. In molti modi una variabile statica è simile a una variabile globale (entrambi hanno durate di archiviazione statiche)