0

MATLAB のmxDestroyArray()関数を使用していますが、適切なエラー処理を行うにはどうすればよいでしょうか。

私が呼び出した場合、または同様の場合、成功時と失敗時、つまりメモリがいっぱいの場合mxCreate*Array()に有効なポインターを取得します。NULL

この方法でいくつかのアレイを作成し、少なくとも 1 つが失敗した場合、不要になったものをすべて解放したいと考えています。

ここで私は疑問に思っています:すべての値を明示的にチェックする必要がありますか?

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 がクラッシュするかどうかを確認してください。null有効なメモリアドレスを参照していないため、プレーンCでも行うようにチェックが必要だと思います

于 2012-02-08T17:56:07.653 に答える
2

私はこれが必要だとは思わず、いくつかの理由でそのようなメモリをクリーンアップする必要はありません:

  1. mxCreate* 関数の呼び出しが失敗した場合、メモリ不足が原因である可能性が最も高くなります。MEX API の一部のバージョンでは、これによりセグメンテーション違反が発生し、クリーンアップを実行する機会がありません。

  2. MATLAB は、MEX 関数が終了するとき、または mxErr への呼び出しがあるときに、plhs[] 内の MEX 関数から返されない配列を自動的に破棄します。

于 2012-02-08T20:19:36.593 に答える