【发布时间】:2018-05-15 09:23:13
【问题描述】:
我有一个 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);
}
【问题讨论】:
-
一般来说,C 中的运行时异常会导致 MATLAB mex 崩溃。例如,非法读取。
-
在这种情况下非法读取会是什么?
-
越界、未初始化等。任何确实会产生运行时错误的东西。