ciao,
@paoletta: esatto!
@dani:
infatti ho scritto "se sei bravo"

è fondamentale inizializzare i puntatori a NULL, come le variabili ad un valore di default.
Se questi/queste(le variabili) non sono globali, al loro interno contengono il valore della locazione di memoria cui fanno riferimento :P
In pratica quando all'interno del main fai int a; a non è a 0 ma al valore che i 4byte che interessano ad a contenevano prima della dichiarazione della variabile.
Per i puntatori è uguale. Se da un lato hai svariate possibilità che questi valori siano insignificanti e che quindi possano portare anche ad una segfault... dall'altro può capitare che il valore sia davvero l'indirizzo di una variabile... e che a questo punto cominci a variare cose che neanche tu hai l'idea.
Ti faccio un rapido esempio sfruttando questa caratteristica
- Codice: Seleziona tutto
#include <stdio.h>
void Test()
{
int a;
if(a!=1)
{
printf("ora a ha un valore indefinito: %d\n",a);
a=1;
printf("ora l'ho settato ad 1 ed esco dalla procedura\n\n");
return;
}
else
{
printf("Vedi che ha conservato il suo valore????\n");
}
}
int main()
{
Test();
Test();
return 1;
}
Se lanci questo codice vedrai che non essendoci giochi di memoria (altre dichiarazioni o che ne so) tra le due chiamate di Test, a viene dichiarata nella stessa area di memoria... e quindi contiene il valore che aveva prima di terminare il suo ciclo di vita nella funzione!
Non è una cosa piuttosto pericolosa?????
(La risposta è si! perchè ci sono passato... proprio con i puntatori... vattelo a pesca un errore del genere

)
Quindi che siano puntatori o variabili normali.... dichiarare+inizializzare!
Penso i costruttori di default siano nati "anche" in virtù di questo aspetto
ciao
Gio