C++调用Matlab使用engPutVariable有大小限制

godknows007 godknows007 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的电脑是i7,32GB内存,matlab是R2014b,C++用的visual studio 2013.
下面的代码,release后直接运行,输出结果是:

可见,double类型的数组在size为268435442x1的时候可以从C++放到matlab中去,但是268435443x1失败了。
在C++开启的matlab窗口中,直接a=ones(268435443,1),却可以创建一个新的数组。

就算是重启了电脑后也是同样的结果。


#include "engine.h"
int main(int argc, char **argv)
{
//runTest1DPA();
Engine *ep;

ep = engOpen(NULL);
int size = 268435441;//268435442 ok, 268435443 failed
int ink = 1;
int rt = 0;
while (1)
{
size ++;
double *t = new double[size]();
for (int i = 0; i < size; i++)
t[i] = i;
mxArray *mx_values = mxCreateDoubleMatrix(size, 1, mxREAL);
memcpy(mxGetPr(mx_values), t, size * 1 * sizeof(double));
delete t;
int rt = engPutVariable(ep, "t", mx_values);
mxDestroyArray(mx_values);
if (rt==0)
cout << "matrix size = " << size << " succeed" << endl;
else
cout << "matrix size = " << size << " failed" << endl;
}

engClose(ep);
return 0;
}
...全文
评论 2
收藏 已收藏
分享
返回顶部
godknows007
其它技术问题 3,881 成员 9,044 内容