c++ matlab混合编程时mxArray 内存泄露问题

本文讨论了在使用mxArray和mxStruct时如何避免内存泄漏的问题,特别是在C++中调用MATLAB函数并更新mxStruct字段时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于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,此函数是迭代进行的,会将里面的所有成员空间全部释放.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值