我使用MATLAB的mxDestroyArray()
function,并想知道如何正确处理错误。
如果我打电话给mxCreate*Array()
或类似,我会在成功时获得有效指针,并在失败时获得NULL
,i。即如果记忆已满。
如果我以这种方式创建多个阵列并且至少有一个失败,我想释放所有我不再需要的东西。
我想知道:我是否需要明确检查每个值?
if (error) {
if (a) mxDestroyArray(a);
if (b) mxDestroyArray(b);
if (c) mxDestroyArray(c);
}
或者我可以省略支票吗?
if (error) {
mxDestroyArray(a);
mxDestroyArray(b);
mxDestroyArray(c);
}
答案 0 :(得分:2)
只需尝试一下,看看matlab是否崩溃。我认为您需要检查,因为您在普通C中也是如此,因为null
没有引用有效的内存地址
答案 1 :(得分:2)
我认为这不是必要的,我不打算清理这样的记忆,原因如下:
如果对mxCreate *函数的调用失败,很可能是因为你的内存不足。 对于某些版本的MEX API,这将导致违反分段,并且您无法进行清理。
当MEX函数终止或调用mxErr时,MATLAB将自动销毁plhs []中未从MEX函数返回的任何数组。