Mi sono imbattuto in questa rete mentre stavo studiando alcune cose relative alla perdita di memoria.cos'è "riferimento sospeso" e "errore di protezione generale"?
int* Function()
{
int arrays[10];
/* Some code here */
return &(arrays[0]);
}
l'autore dice che il pezzo di codice di cui sopra è valido, ma il ricordo che viene restituito verrà riutilizzato dalla funzione successiva si chiama, in modo che la stessa memoria viene utilizzato per due scopi. Questo è chiamato "riferimento sospeso" e può causare errori orribilmente intermittenti o un "errore di protezione generale" vecchio stile.
Sarebbe bello se qualcuno può spiegare ciò che è "appeso riferimento" & "errore di protezione generale"
L'autore non sa molto bene C, o la stai travisando. Il programma ha un comportamento indefinito. –
Questo non fa esattamente la perdita di memoria, poiché l'array assegnato verrà automaticamente rilasciato quando la funzione ritorna. Questo è il significato di un riferimento sospeso, si sta restituendo un puntatore ad una memoria allocata nello stack.Quando la funzione ritorna, l'array allocato allo stack viene deallocato, in modo tale che la posizione in memoria possa essere sovrascritta dai dati per la prossima chiamata di funzione, quindi il dereferenziamento del puntatore restituito darà un valore indefinito. –
Yup sembra un riferimento sospeso significa riferirsi a qualcosa sullo stack che non esiste più. Qualche idea su "errore di protezione generale"? –