c++调用.m文档 输出问题
我所要调用的.m生成的E的大小是38416*3 ,double类型,D的大小是224488*4 int32类型;
double x1=1;
mxArray *A=mxCreateDoubleMatrix(1,1,mxREAL);
memcpy(mxGetPr(A),&x1,1*sizeof(double));
mxArray *E=mxCreateDoubleMatrix(38416,3,mxREAL);//
xArray *D=mxCreateNumericMatrix(224488,4,mxINT32_CLASS,mxREAL);
mlfReadMesh(1,&C,&D,A);//调用的.m函数
我的最终目的是想把输出口C和D中的元素取出来,于是按以下两种方法实施,可惜都遇到了错误,求指点
方法一:
我想将C D转换成数组的形式输出到C++中,于是增加下面代码:
double resultver[38416][3];
int resulttet[22448][4];
memcpy(&resultver,mxGetPr(E),(3*38416)*sizeof(double));
memcpy(&resulttet,mxGetPr(D),(4*224488)*sizeof(INT32));
生成解决方案的时候顺利通过,但是调试的时候以对话框的形式报错如下:
cm_out_test.exe 中的 0x00b81907 处有未经处理的异常: 0xC00000FD: Stack overflow
方法二:不用把C D转换为数组,直接从C D里取出元素的值,于是使用下面这段代码
INT32* p1;
p1 = mxGetPr(D);
到此,报错:c2440:"="无法从"double*"转换为“INT32*”于是我将代码改为p1 = (INT32)mxGetPr(D);这时不报
错了,但是指针p1里的内容始终为0;而事实上mxArray类型的D的第一行为 17 2 1 785;按道理说p1里存的内容应该
为17才对呀;
求指点呀
[解决办法]
double resultver[38416][3];
int resulttet[22448][4];
粗看下,可能的原因是栈溢出了
要么用动态申请内存,要么把它定义成static或全局的
[解决办法]
static double resultver[38416][3];
static int resulttet[22448][4];
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。