C++ 调用MATLAB引擎 在memcpy处报错,解决方案

在C++中使用MATLAB引擎进行数值计算时遇到内存越界问题,原因是MATLAB引擎未初始化导致mxCreateDoubleMatrix返回NULL。解决方案是在创建矩阵前初始化引擎,并将memcpy替换为更安全的memcpy_s以优化调试。

在用C++调用MATLAB做数值计算的时候,遇到了内存越界报错

...
y1 = mxCreateDoubleMatrix(1, N, mxREAL);
memcpy((void*)mxGetPr(y1), (void*)y, N*sizeof(double));

代码如上,光看这一句似乎没什么问题,花了半天功夫才找到原因:MATLAB引擎没有初始化
mxCreateDoubleMatrix(1, N, mxREAL);这一句返回的是NULL
解决方案:
在创建矩阵之前先初始化引擎

mclInitializeApplication(NULL, 0);
...
y1 = mxCreateDoubleMatrix(1, N, mxREAL);
memcpy((void*)mxGetPr(y1), (void*)y, N*sizeof(double));

还可以改进的是:将memcpy改成memcpy_s

mclInitializeApplication(NULL, 0);
Engine *ep;
if (!(ep = engOpen("\0"))) {
    MessageBox("打开MATLAB失败");
    return;
}
y1 = mxCreateDoubleMatrix(1, N, mxREAL);
memcpy_s((void*)mxGetPr(y1), sizeof(double)*N,(void*)y, N*sizeof(double));

将memcpy改成memcpy_s的好处是方便debug

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值