Matlab в конечном итоге вылетает с mex callback - PullRequest
0 голосов
/ 15 мая 2018

У меня есть функция Mex, которая перенаправляет определенные сообщения и типы сообщений (1,2,3) из C в функцию Matlab 'fruit_getpar.m'.Эта функция Matlab 'fruit_getpar.m' извлекает параметры из строки сообщения и сохраняет ее как переменные.Сообщения C генерируются в случайных случаях.Проблема: иногда происходит сбой Matlab при создании сообщений C, хотя структура этого сообщения всегда одна и та же.

какие-либо подсказки?

#include "mex.h"
#include "fruit_matlab.h"
#include "string.h"

// Callback function
    void fruit_mexCallback(char *message, double message_type){
    mxArray *lhs[2];
    char sType[5];

    if (message == NULL || message_type <= 0)
          return;

    if (strstr(message, "apple") == NULL && strstr(message, "banana") == NULL && strstr(message, "orange") == NULL) {
    itoa((int)message_type, sType, 10);
    lhs[0] = mxCreateString(message);
    lhs[1] = mxCreateString(sType);
    mexCallMATLAB(0, NULL, 2, lhs, "fruit_getpar");
    mxDestroyArray(lhs[0]);
    mxDestroyArray(lhs[1]);
    }
    return;  
    }

// MEX Gateway
    void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
    //pointer to callback function
    void (*cbPtr)() = NULL;
    cbPtr = fruit_mexCallback;
    Register_Callback(cbPtr);
    }

1 Ответ

0 голосов
/ 15 мая 2018

in

void (*cbPtr)() = NULL;
cbPtr = fruit_mexCallback;
Register_Callback(cbPtr);

fruit_mexCallback тип не void(*)(), это void(*)(char *message, double message_type), поэтому, когда он вызывается как void(*)(), параметры могут иметь любое значение и не могут использоваться

...