2016年10月26日 星期三

MsysFree error, system still has buffer associated with it

MsysFree的時候會跳出錯誤訊息說system中的buffer沒有清除乾淨
但是找過所有的MIL_ID都已經做過Free了



因為這個程式是改範例來的,範例中使用MxxAllocate並且利用程式碼來建立xx。但我將它"加入"MxxRestore,以讀取UI建立的xx。但即使有Free xx了,在Free system的時候還是有錯誤。
後來找出原因是在我MxxRestore的時候會產生一個新的物件,我將指標存在原本MxxAlocate產生的指標
大概像這樣
MxxAllocate(ref xx);
MxxRestore(ref xx);
因為MIL在MxxRestore的時候不知道其他地方是否會再用到xx,所以並不會在Restore的時候檢查並Free xx。而是直接覆蓋指標,造成舊的xx消失在一片漆黑當中。再也沒有人認識他,可以找到她,所以也不可能可以Free,注定造成Free system的錯誤。
解決的方法可以是在Restore之前先檢查xx
if(xx != 0) MxxFree(xx);
MxxRestore(ref xx);

Some buffer have lost it's pointer. May cause by sent a not-null pointer when allocating/ restoring, hence the object lost it's pointer and can't be free forever.
Check the pointer container before sent it as ref.

沒有留言:

張貼留言