@@ -396,6 +396,7 @@ fmi2Component fmi2Instantiate(fmi2String instanceName, fmi2Type fmuType, fmi2Str
396396
397397 comp -> instanceName = (fmi2String )functions -> allocateMemory (1 + strlen (instanceName ), sizeof (char ));
398398 comp -> GUID = (fmi2String )functions -> allocateMemory (1 + strlen (fmuGUID ), sizeof (char ));
399+ comp -> functions = (fmi2CallbackFunctions * )functions -> allocateMemory (1 , sizeof (fmi2CallbackFunctions ));
399400 fmudata = (DATA * )functions -> allocateMemory (1 , sizeof (DATA ));
400401 modelData = (MODEL_DATA * )functions -> allocateMemory (1 , sizeof (MODEL_DATA ));
401402 simInfo = (SIMULATION_INFO * )functions -> allocateMemory (1 , sizeof (SIMULATION_INFO ));
@@ -423,7 +424,7 @@ fmi2Component fmi2Instantiate(fmi2String instanceName, fmi2Type fmuType, fmi2Str
423424 }
424425 }
425426
426- if (!comp || !comp -> instanceName || !comp -> GUID ) {
427+ if (!comp || !comp -> instanceName || !comp -> GUID || ! comp -> functions ) {
427428 functions -> logger (functions -> componentEnvironment , instanceName , fmi2Error , "error" , "fmi2Instantiate: Out of memory." );
428429 return NULL ;
429430 }
@@ -435,7 +436,7 @@ fmi2Component fmi2Instantiate(fmi2String instanceName, fmi2Type fmuType, fmi2Str
435436 strcpy ((char * )comp -> instanceName , (const char * )instanceName );
436437 comp -> type = fmuType ;
437438 strcpy ((char * )comp -> GUID , (const char * )fmuGUID );
438- comp -> functions = functions ;
439+ memcpy (( void * ) comp -> functions , ( void * ) functions , sizeof ( fmi2CallbackFunctions )) ;
439440 comp -> componentEnvironment = functions -> componentEnvironment ;
440441 comp -> loggingOn = loggingOn ;
441442 comp -> state = modelInstantiated ;
@@ -500,6 +501,7 @@ fmi2Component fmi2Instantiate(fmi2String instanceName, fmi2Type fmuType, fmi2Str
500501void fmi2FreeInstance (fmi2Component c )
501502{
502503 ModelInstance * comp = (ModelInstance * )c ;
504+ fmi2CallbackFreeMemory freeMemory = comp -> functions -> freeMemory ;
503505 int meStates = modelInstantiated |modelInitializationMode |modelEventMode |modelContinuousTimeMode |modelTerminated |modelError ;
504506 int csStates = modelInstantiated |modelInitializationMode |modelEventMode |modelContinuousTimeMode |modelTerminated |modelError ;
505507
@@ -537,8 +539,9 @@ void fmi2FreeInstance(fmi2Component c)
537539 /* free instanceName & GUID */
538540 if (comp -> instanceName ) comp -> functions -> freeMemory ((void * )comp -> instanceName );
539541 if (comp -> GUID ) comp -> functions -> freeMemory ((void * )comp -> GUID );
542+ if (comp -> functions ) comp -> functions -> freeMemory ((void * )comp -> functions );
540543 /* free comp */
541- comp -> functions -> freeMemory (comp );
544+ freeMemory (comp );
542545}
543546
544547fmi2Status fmi2SetupExperiment (fmi2Component c , fmi2Boolean toleranceDefined , fmi2Real tolerance , fmi2Real startTime , fmi2Boolean stopTimeDefined , fmi2Real stopTime )
0 commit comments