首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++调用.m文档 输出有关问题

2012-04-09 
c++调用.m文档 输出问题我所要调用的.m生成的E的大小是38416*3 ,double类型,D的大小是224488*4int32类型;d

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将其从堆栈数据段挪到全局数据段即可。

热点排行