S-Functions de Matlab: Donde usar ssSetPWorkValue()?

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