私はMATLABのmxDestroyArray()
functionを使用して、適切なエラー処理を行う方法を知りました。MATLAB C API:mxDestroyArray(NULL)とは何ですか?
私がmxCreate*Array()
と呼んだ場合やそれと似たような場合は、成功した場合には有効なポインタを取得し、失敗した場合はNULL
を返します。 e。メモリがいっぱいの場合。
このように複数の配列を作成し、少なくとも1つが失敗した場合は、もう必要のないものをすべて解放します。
私は疑問に思っています。すべての値を明示的にチェックする必要がありますか?
if (error) {
if (a) mxDestroyArray(a);
if (b) mxDestroyArray(b);
if (c) mxDestroyArray(c);
}
または私はちょうどチェックを省略することができますか?
if (error) {
mxDestroyArray(a);
mxDestroyArray(b);
mxDestroyArray(c);
}
私は確信していませんが、十分なメモリがない場合、matlabはあなたのmexファイルから直接外に出ます。その場合、おそらく例外や何かをキャッチすることができます...とにかく、Mathworksによってコード化されたmexファイルを見るには、 'edit([matlabroot '/extern/examples/refbook/matrixDivideComplex.c']);' 'mxDestroyArray'を呼び出す前に特別なことはしません。 – Oli
@Oli mexファイルの場合、あなたは正しいです。しかし、外部プログラムからMATLABを呼び出すという方向性もあります。これは現在私の問題です。そして、あなたはNULLを得ることができます。 – glglgl