El ssSetPWorkValue() de Matlab no puede ser usado en la funcion mdlInitializeSizes de una S-Function. Esto es porque la funcion mdlInitializeSizes es llamada antes de que los work vectors de la S-Function sean asignados.
Usarlo en mdlInitializeSizes() resultara en un segmentation fault, llevando a un cuelgue de Matlab/Simulink.
El lugar correcto para usar ssSetPWorkValue() es en la funcion mdlStart. Esta funcion es llamada despues de que los work vectors han sido asignados y es la primera funcion donde puedes usar ssSetPWorkValue() de manera segura.
sssetpwork_example.cpp
#define MDL_START
static void mdlStart(SimStruct *S)
{
// Asignar memoria para el pointer work vector
ssSetPWorkValue(S, 0, new MyDataStructure());
}
Echa un vistazo a artículos similares por categoría:
Matlab/Simulink
Si este artículo te ha ayudado, considera invitarme a un café o hacer una donación vía PayPal para apoyar la investigación y publicación de nuevos artículos en TechOverflow