Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Matlab最终因mex回调而崩溃_C_Matlab_Crash_Mex - Fatal编程技术网

C Matlab最终因mex回调而崩溃

C Matlab最终因mex回调而崩溃,c,matlab,crash,mex,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

我有一个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);
    }
#包括“mex.h”
#包括“fruit_matlab.h”
#包括“string.h”
//回调函数
无效水果返回(字符*消息,双消息类型){
mxArray*lhs[2];
炭黑[5];
如果(消息==NULL | |消息类型in


fruit\u mexCallback类型不是
void(*)(
它是
void(*)(char*message,double message\u type)
所以当它被称为
void(*)(
参数可以有任何值并且不能使用

您指的是“void(*cbPtr)(=NULL”,应该是void(*cbPtr)(char*message,double message\u type)=NULLl?函数最终崩溃不是很奇怪吗?这听起来更像是一个根本不会运行脚本的bug…@DaanvS这并不奇怪,参数将有随机值,并且你有一个先决条件检查,它将返回NULL,但指针可能错误,而不是NULL。我也不知道Register\u回调的原型它是如何使用回调的,所以我可以说我认为奇怪的事情不幸的是没有运气:(你有关于Register_callback的文档吗?)一般来说,C中的运行时异常会使MATLAB mex崩溃。例如,非法读取。在此上下文中,非法读取可能是什么?越界、未初始化等。任何真正导致运行时错误的内容。
void (*cbPtr)() = NULL;
cbPtr = fruit_mexCallback;
Register_Callback(cbPtr);