0

我使用 MATLAB 的mxDestroyArray()函数,想知道如何进行正确的错误处理。

如果我打电话mxCreate*Array()或类似,我会得到一个关于成功和NULL失败的有效指针,即如果内存已满。

如果我以这种方式创建了几个数组并且至少有一个失败了,我想释放所有我不再需要的东西。

在这里我想知道:我是否需要明确检查每个值?

if (error) {
    if (a) mxDestroyArray(a);
    if (b) mxDestroyArray(b);
    if (c) mxDestroyArray(c);
}

或者我可以省略支票吗?

if (error) {
    mxDestroyArray(a);
    mxDestroyArray(b);
    mxDestroyArray(c);
}
4

2 回答 2

3

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

于 2012-02-08T17:56:07.653 回答
2

我不认为这是必要的,我也懒得清理这样的内存,原因如下:

  1. 如果调用 mxCreate* 函数失败,很可能是因为内存不足。对于某些版本的 MEX API,这将导致分段违规,并且您无论如何都没有机会执行清理。

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

于 2012-02-08T20:19:36.593 回答