首页 文章

Matlab最终崩溃了mex回调

提问于
浏览
1

我有一个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 回答

  • 1

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

    fruit_mexCallback类型不是 void(*)() 它是 void(*)(char *message, double message_type) 所以当它被调用为 void(*)() 时参数可以有任何值而不能使用

相关问题