Variabili locali

di il
6 risposte

Variabili locali

Buonasera, ho sempre pensato che le variabili che una funzione riceve come parametro fossero variabili locali e che quindi fossero distrutte all'uscita dalla funzione, invece nel seguente codice

#include <iostream>
using namespace std;

class Prova {
public:
	Prova(int y) {
		p = &y;
	};
	int get() {
		return *p;
	};
private:
	int* p;
};

int main(int argc, char** argv) {
	int x = 12;
	Prova pr(x);
	cout << pr.get() << endl;
	return 0;
}
la cout stampa 12. Com'è possibile? La copia di x passata al costruttore non dovrebbe venire distrutta all'uscita del costruttore stesso quando il suo stack frame viene deallocato?

Grazie

6 Risposte

  • Re: Variabili locali

    X esiste finché non termina il main, quindi non capisco cosa intendi
  • Re: Variabili locali

    Certo, che p esista lo comprendo, ma secondo me è l'oggetto puntato che non dovrebbe più esistere dopo l'uscita dal costruttore.
  • Re: Variabili locali

    Mi correggo ... vedo meglio il codice ed effettivamente non passi il puntatore quindi otterrai un valore casuale in quanto y non esiste più.

    Sarebbe diverso se scrivessi
    
       Prova(int *y) {
          p = y;
       };
    
    e
    
    Prova pr(&x);
    
  • Re: Variabili locali

    Sì, è questo che non capisco. Mi sembra strano che "casualmente" il valore sia sempre 12, proprio 12!
  • Re: Variabili locali

    Dipende dallo stato dell'esecuzione. Non è così per tutti i compilatori, per tutte le esecuzioni nello stesso tempo ... La memoria viene "liberata" ma non è detto che venga utilizzata nel frattempo. E' una regola comune a tutto il contenuto di memoria non più riservata, può conservare lo stesso valore o meno a seconda dell'utilizzazione.
  • Re: Variabili locali

    Ho capito. Grazie.
Devi accedere o registrarti per scrivere nel forum
6 risposte