MATLAB C API:mxDestroyArray(NULL)有什么作用?

时间:2012-02-08 17:25:42

标签: api matlab c-api

我使用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);
}

2 个答案:

答案 0 :(得分:2)

只需尝试一下,看看matlab是否崩溃。我认为您需要检查,因为您在普通C中也是如此,因为null没有引用有效的内存地址

答案 1 :(得分:2)

我认为这不是必要的,我不打算清理这样的记忆,原因如下:

  1. 如果对mxCreate *函数的调用失败,很可能是因为你的内存不足。 对于某些版本的MEX API,这将导致违反分段,并且您无法进行清理。

  2. 当MEX函数终止或调用mxErr时,MATLAB将自动销毁plhs []中未从MEX函数返回的任何数组。