エラーの解決: コード ジェネレーターは、MATLAB クラスの C++ デストラクターを生成できませんでした
問題
MATLAB® コードから C++ クラスをもつ再呼び出し可能なコードを生成すると、コード実行時にスタック オーバーフローが発生する可能性が増加します。コード生成が停止し、次のメッセージが表示される可能性があります。
コード ジェネレーターは、MATLAB クラス 'y' の C++ デストラクターを生成できませんでした。生成されたコードは例外セーフでありません。C++ デストラクターの生成を有効にするには、[再呼び出し可能なコードを生成] (MultiInstanceCode) 構成パラメーターを無効にしてください。
このメッセージは、次のすべての条件に該当する場合に表示される可能性があります。
クラスを使用する MATLAB コードから C++ コードを生成する。
[MATLAB クラスから C++ クラスを生成] パラメーターを使用して、MATLAB クラスから C++ クラスを生成するようにコード ジェネレーターに指示する。
[再呼び出し可能なコードを生成] パラメーターを使用して、再呼び出し可能なコードを生成するようにコード ジェネレーターに指示する。
MATLAB コード内のクラスのデストラクターが永続変数をもつか、永続変数を宣言して使用する別の関数を呼び出す。
考えられる解決策
生成するコードのタイプに応じて、次のいずれかの解決策を試してください。
スタック制限の引き上げ
MATLAB クラスに対応する C++ クラスをもつ再呼び出し可能なコードを生成する場合は、次のいずれかの方法を使用してスタック制限を引き上げます。
[コード生成設定] ダイアログ ボックスで、[最大スタック使用量] パラメーターの値を増やす。
スタンドアロン コード生成の構成オブジェクトで、
StackUsageMax
プロパティの値を増やす。
コード生成が正常に実行され、コード ジェネレーターが再呼び出し可能なコードで C++ クラスを生成したことが示されるまで、スタックの値を 2 倍にしてスタック制限を引き上げます。
メモ
設定可能な最大スタック制限は、システムのリンカーによって異なります。既定のスタック サイズは、オペレーティング システムとシステム構成によって異なります。
MATLAB コード内のクラスのデストラクターは、永続変数をもつことも、永続変数を宣言する別の関数を呼び出すこともしてはなりません。
再呼び出し可能なコードの無効化
MATLAB クラスに対応する C++ クラスを含むコードを生成するには、再呼び出し可能なコードの生成を無効にできます。次のいずれかを行います。
コード構成オブジェクトで、
MultiInstanceCode
プロパティをfalse
に設定する。[コード生成設定] ダイアログ ボックスで、[再呼び出し可能なコードを生成] チェック ボックスをオフにする。
クラスの代わりに構造体を生成
コード ジェネレーターの既定の動作を変更して、MATLAB クラスに対応する構造体を生成できます。次のいずれかを行います。
コード構成オブジェクトで、
CppPreserveClasses
プロパティをfalse
に設定する。[コード生成設定] ダイアログ ボックスで、[MATLAB クラスから C++ クラスを生成] チェック ボックスをオフにする。