Matlab最终崩溃了mex回调

时间:2018-05-15 09:23:13

标签: c matlab crash mex

我有一个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 :(得分:1)

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

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