Генерация повторно используемого кода с классами C++ из кода MATLAB® увеличивает возможности переполнения стека во время выполнения кода. Генерация кода может остановить и произвести это сообщение:
Code generator failed to produce C++ destructor for MATLAB class 'y'. Generated code is not exception-safe. To enable generation of C++ destructor, disable 'Generate Re-entrant code (MultiInstanceCode)' configuration parameter.
Это сообщение может появиться, если оба этих условия верны:
Вы принимаете решение сгенерировать Код С++ с классами из кода MATLAB установкой TargetLang
к 'C++
'и CppPreserveClasses
к true
в объекте настройки (coder.CodeConfig
или coder.EmbeddedCodeConfig
), или в проекте создают настройки, установкой Language к C++
и проверка флажка Generate C++ classes from MATLAB classes.
Вы принимаете решение сгенерировать повторно используемый код путем включения MultiInstanceCode
параметр в объекте настройки кода, или путем включения параметра Generate re-entrant code во вкладке Memory приложения MATLAB Coder™.
Деструктор класса в вашем коде MATLAB имеет персистентную переменную или вызывает другую функцию, которая объявляет и использует персистентную переменную.
В зависимости от того, хотите ли тип кода вы сгенерировать, попробовать одно из этих решений.
Можно повысить предел стека, чтобы сгенерировать повторно используемый код, который имеет классы C++ для классов MATLAB. Выполнить одно из следующих действий:
В диалоговом окне настроек проекта под вкладкой Memory, установленной параметр Stack usage max.
В настройке возражают для автономной генерации кода (coder.CodeConfig
или coder.EmbeddedCodeConfig
), установите StackUsageMax
параметр.
Повысьте предел стека путем удвоения значения стека, пока генерация кода не успешно выполнится. Генератор кода затем может иметь достаточную память, чтобы сгенерировать классы C++ в повторно используемом коде.
Примечание
Максимальный конфигурируемый предел стека зависит от компоновщика в вашей системе. Размер стека по умолчанию варьируется на основе вашей операционной системы и конфигурации системы.
Деструктор класса в вашем коде MATLAB не должен иметь персистентной переменной или вызывать другую функцию, которая объявляет персистентную переменную.
Чтобы сгенерировать код, который содержит классы C++ для классов MATLAB, можно отключить генерацию повторно используемого кода. Выполнить одно из следующих действий:
В объекте настройки кода отключите MultiInstanceCode
параметр.
В приложении MATLAB Coder отключите параметр Generate re-entrant code.
Можно изменить поведение по умолчанию генератора кода, чтобы произвести структуры для классов MATLAB. Выполнить одно из следующих действий:
В настройке возражают для автономной генерации кода (coder.CodeConfig
или coder.EmbeddedCodeConfig
), установите TargetLang
к 'C++
'и CppPreserveClasses
к false
.
В приложении MATLAB Coder, набор Language к C++
. В настройках сборки проекта снимите флажок Generate C++ classes from MATLAB classes.