Evitare la perdita di memoria chiudendo forzatamente un Form

Da Gambas-it.org - Wikipedia.

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 Leak): 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 dell'oggetto, agendo mediante la funzione Free(), e prima del comando Quit, sull'indirizzo dell'oggetto medesimo fornito dal metodo .Address() della Classe Object:

Public Sub Button1_LostFocus()
 
Print "Button1_LostFocus"

End


Public Sub Button2_Click()

 Free(Object.Address(Button1))

 Quit

End