Differenze tra le versioni di "Evitare la perdita di memoria chiudendo forzatamente un Form"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'In talune particolari circostanze può accadere che utilizzando, per chiudere un ''Form'' (o comunque il programma), l'istruzione ''Quit'' si abbia in console questo tipo di m...')
 
Riga 19: Riga 19:
  
 
Per ovviare a questa perdita di memoria, bisognerà provvedere via codice a liberare l'area di memoria riservata agendo prima del comando ''Quit'' sul suo indirizzo fornito dal metodo ''.Address()'' della Classe ''Object'' mediante la funzione ''Free()'':
 
Per ovviare a questa perdita di memoria, bisognerà provvedere via codice a liberare l'area di memoria riservata agendo prima del comando ''Quit'' sul suo indirizzo fornito dal metodo ''.Address()'' della Classe ''Object'' mediante la funzione ''Free()'':
  '''Public''' Sub Button1_LostFocus()
+
'''Public''' Sub Button1_LostFocus()
 
    
 
    
 
  Print "Button1_LostFocus"
 
  Print "Button1_LostFocus"

Versione delle 08:48, 24 giu 2015

In talune particolari circostanze può accadere che utilizzando, per chiudere un Form (o comunque il programma), l'istruzione Quit si abbia in console questo tipo di messaggio:

gbx3: warning: 1 allocation(s) non freed.

Facciamo un semplice esempio pratico:

Public Sub Button1_LostFocus()
 
 Print "Button1_LostFocus"

End


Public Sub Button2_Click()

 Quit

End

Detto avviso sta a significare che nel chiudere il programma o comunque il Form è avvenuta una perdita di memoria (Memory Leaks). L'area di memoria riservata attinente in tal caso ad un componente grafico non è stata liberata adeguatamente e resta pertanto riservata, inservibile, non sovrascrivibile.


Per ovviare a questa perdita di memoria, bisognerà provvedere via codice a liberare l'area di memoria riservata agendo prima del comando Quit sul suo indirizzo fornito dal metodo .Address() della Classe Object mediante la funzione Free():

Public Sub Button1_LostFocus()
 
Print "Button1_LostFocus"

End


Public Sub Button2_Click()

 Free(Object.Address(Button1))

 Quit

End