c++ matlab混合編程時mxArray 內存泄露問題

對於mxArray在創建完後若使用完一定要注意回收空間,不然會memory leak.如果是mxstruct,只要對其中的field進行了賦值操作,那麼其原先的field一定要先進行memory的回收!

eg:
c++中要調用out_params = color_tracker3(params,params) 這樣一個函數,而params 和out_params都是在c++程序中跟新和管理的。其中params 裏有一個field “image”,每次傳進去之前都需要重新對“image”進行賦值,那麼此時就要注意將原先的“image”回收掉:

    mxArray *temp = mxGetField(out_params, 0, "im");
    mxDestroyArray(temp);

    mxSetField(out_params, 0, "im", MxArray(img));

上面程序的memory泄露主要是因爲在c++只用了一個參數來進行參數的跟新,而且*color_tracker3函數的*out_params也將上一次的image給傳出來了,而且matlab中out_params = engGetVariable(ep, "out_params"); 是將參數複製一份,所以在進行原先的賦值操作時候將out_params傳出來的”image“內存給泄露了.

綜上:
如果想對matlab struct 中的field進行修改的時候首先加上防止memory leak
mxArray *temp = mxGetField(out_params, 0, "im");
mxDestroyArray(temp);

如果對於整個struct都不需要的話僅需對該struct進行mxDestroyArray,此函數是迭代進行的,會將裏面的所有成員空間全部釋放.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章