Matlabs ssSetPWorkValue() darf nicht in der Funktion mdlInitializeSizes einer S-Funktion verwendet werden. Dies liegt daran, dass die Funktion mdlInitializeSizes aufgerufen wird, bevor die Work-Vektoren der S-Funktion zugewiesen werden.
Die Verwendung in mdlInitializeSizes() führt zu einem Segmentation Fault, was einen Matlab/Simulink-Absturz zur Folge hat.
Der korrekte Ort zur Verwendung von ssSetPWorkValue() ist die Funktion mdlStart. Diese Funktion wird aufgerufen, nachdem die Work-Vektoren zugewiesen wurden, und ist die erste Funktion, in der du ssSetPWorkValue() sicher verwenden kannst.
sssetpwork_example.cpp
#define MDL_START
static void mdlStart(SimStruct *S)
{
// Speicher für den Pointer-Work-Vektor reservieren
ssSetPWorkValue(S, 0, new MyDataStructure());
}
Ähnliche Beiträge nach Kategorie:
Matlab/Simulink
Wenn dieser Beitrag dir geholfen hat, erwäge, mir einen Kaffee zu spendieren oder per PayPal zu spenden, um die Recherche und Veröffentlichung neuer Beiträge auf TechOverflow zu unterstützen