hi, I'm studying a C mex s-function. I wrote following C++ code.
#define S_FUNCTION_NAME sfun_exam#define S_FUNCTION_LEVEL 2#include "simstruc.h"#include "matrix.h" // for mxMalloc#include <stdlib.h>#define FALSE 0#define TRUE 1#define NUM_INPUTS 0#define NUM_OUTPUTS 0#define NUM_PARAMS 0#define NUM_CONT_STATE 0#define NUM_DISC_STATE 0static void mdlInitializeSizes(SimStruct *S){ ssPrintf("mdlInitializeSizes entry\n"); ssSetNumSFcnParams(S, NUM_PARAMS); //ssSetSFcnParamTunable(S, 0, 0); ssSetNumContStates(S, NUM_CONT_STATE); ssSetNumDiscStates(S, NUM_DISC_STATE); if (!ssSetNumInputPorts(S, NUM_INPUTS)) return; if (!ssSetNumOutputPorts(S, NUM_OUTPUTS)) return; ssSetNumSampleTimes(S, 1); ssSetNumRWork(S, 0); ssSetNumIWork(S, 0); ssSetNumPWork(S, 1); ssSetNumModes(S, 0); ssSetNumNonsampledZCs(S, 0); ssSetSimStateCompliance(S, USE_DEFAULT_SIM_STATE); ssSetOptions(S, 0); ssPrintf("mdlInitializeSizes exit\n");}static void mdlInitializeSampleTimes(SimStruct *S){ ssPrintf("mdlInitializeSampleTimes entry\n"); ssPrintf("mdlInitializeSampleTimes exit\n");}#define MDL_STARTstatic void mdlStart(SimStruct *S){ ssPrintf("mdlStart entry\n"); double *temp = (double *)mxMalloc(sizeof(double)); ssPrintf("assigned address = %d\n", temp); ssGetPWork(S)[0] = (void *)temp; ssPrintf("mdlStart exit\n");}static void mdlOutputs(SimStruct *S, int_T tid){ ssPrintf("mdlOutputs entry\n"); UNUSED_ARG(tid); ssPrintf("mdlOutputs exit\n");}static void mdlTerminate(SimStruct *S){ ssPrintf("mdlTerminate entry\n"); void *temp; temp = ssGetPWork(S)[0]; ssPrintf("assigned address = %d\n", temp); mxFree(temp); ssPrintf("mdlTerminate exit\n");}/*=============================* * Required S-function trailer * *=============================*/#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */#include "simulink.c" /* MEX-file interface mechanism */#else#include "cg_sfun.h" /* Code generation registration function */#endif
It is built without error. but during simulation, MATLAB appcrash occured.
Problem signatureProblem Event Name: APPCRASHApplication Name: MATLAB.exeApplication Version: 7.13.0.0Application Timestamp: 4e4754ebFault Module Name: StackHash_b9f6Fault Module Version: 6.1.7601.17725Fault Module Timestamp: 4ec49b60Exception Code: c0000374Exception Offset: 000c380bOS Version: 6.1.7601.2.1.0.256.48Locale ID: 1042Additional Information 1: b9f6Additional Information 2: b9f67d14f6a48d7204fa389a0a5bf0d1Additional Information 3: c4ccAdditional Information 4: c4ccbe39e350b9853267802fd89da65d
When I used malloc and free Instead of mxMalloc and mxFree, this appcrash didn't occur.
what did I do wrong??
thanks for reading..
Best Answer