Main Content

エラーの解決: コード ジェネレーターは、MATLAB クラスの C++ デストラクターを生成できませんでした

問題

MATLAB® コードから C++ クラスをもつ再呼び出し可能なコードを生成すると、コード実行時にスタック オーバーフローが発生する可能性が増加します。コード生成が停止し、次のメッセージが表示される可能性があります。

コード ジェネレーターは、MATLAB クラス 'y' の C++ デストラクターを生成できませんでした。生成されたコードは例外セーフでありません。C++ デストラクターの生成を有効にするには、[再呼び出し可能なコードを生成] (MultiInstanceCode) 構成パラメーターを無効にしてください。

このメッセージは、次のいずれの条件にも該当する場合に表示される可能性があります。

  • 構成オブジェクト (coder.CodeConfig または coder.EmbeddedCodeConfig) で TargetLang を 'C++' に、CppPreserveClassestrue に設定するか、プロジェクトのビルド設定で [言語]C++ に設定し、[MATLAB クラスから C++ クラスを生成] チェック ボックスをオンにすることで、MATLAB コードのクラスをもつ C++ コードを生成するように選択した。

  • コード構成オブジェクトで MultiInstanceCode パラメーターを有効にするか、MATLAB Coder™ アプリの [メモリ] タブで [再呼び出し可能なコードを生成] パラメーターを有効にすることで、再呼び出し可能なコードを生成するように選択した。

  • MATLAB コード内のクラスのデストラクターが永続変数をもつか、永続変数を宣言して使用する別の関数を呼び出す。

考えられる解決策

生成するコードのタイプに応じて、次のいずれかの解決策を試してください。

スタック制限の引き上げ

MATLAB クラスに対応する C++ クラスをもつ再呼び出し可能なコードを生成する場合は、スタック制限を引き上げることができます。次のいずれかを行います。

  • [プロジェクトの設定] ダイアログ ボックスの [メモリ] タブで、[最大スタック使用量] パラメーターを設定します。

  • スタンドアロン コード生成の構成オブジェクトで (coder.CodeConfig または coder.EmbeddedCodeConfig)、StackUsageMax パラメーターを設定します。

コード生成が正常に実行され、コード ジェネレーターが再呼び出し可能なコードで C++ クラスを生成したことが示されるまで、スタックの値を 2 倍にしてスタック制限を引き上げます。

メモ

設定可能な最大スタック制限は、システムのリンカーによって異なります。既定のスタック サイズは、オペレーティング システムとシステム構成によって異なります。

MATLAB コード内のクラスのデストラクターは、永続変数をもつことも、永続変数を宣言する別の関数を呼び出すこともしてはなりません。

再呼び出し可能なコードの無効化

MATLAB クラスに対応する C++ クラスを含むコードを生成するには、再呼び出し可能なコードの生成を無効にできます。次のいずれかを行います。

  • コード構成オブジェクトで、MultiInstanceCode パラメーターを無効にします。

  • MATLAB Coder アプリで、[再呼び出し可能なコードを生成] パラメーターを無効にします。

クラスの代わりに構造体を生成

コード ジェネレーターの既定の動作を変更して、MATLAB クラスに対応する構造体を生成できます。次のいずれかを行います。

  • スタンドアロン コード生成の構成オブジェクトで (coder.CodeConfig または coder.EmbeddedCodeConfig)、TargetLang を 'C++' に、CppPreserveClassesfalse に設定します。

  • MATLAB Coder アプリで、[言語]C++ に設定します。プロジェクトのビルド設定で、[MATLAB クラスから C++ クラスを生成] チェック ボックスをオフにします。

関連するトピック