Matlab引擎中动态数组传递问题

      这几天在用Matlab引擎,发现一个问题:动态数组不能正确传递进去,在Google上找了会,明确回答这个问题的人并不多,好在今天偶尔发现答案,归根到底是自己C语言基础太差了!    

      主要在于对sizeof函数理解有误:对于常规数组a,sizeof(a)返回的就是数组所占的字节数;对于动态数组,无论是new还是calloc,返回的都是一个指针pr,而sizeof(pr)返回只是类型的字节数,由此导致数组变量传不到matlab引擎中。图和代码如下:

#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include <vector>
#include "iostream"
#include "engine.h"
using namespace std;
#pragma once
#define BUFSIZE 1024

int _tmain(int argc, char ** argv)
{

	int SampleNum=100;
	double TimeSpan=15.0f;        //15秒
	double * Time=new double[SampleNum];
	for (int i=0;i<SampleNum;i++)
	{
		Time[i]=TimeSpan/SampleNum*i;
	}
	cout<<"Size of Variable 'Time' is : "<<sizeof(Time)<<endl;      //对动态数组sizeof只能返回对应类型(int、double)的大小

	Engine * ep;
	if (!(ep=engOpen("")))
	{
		cout<<"Cannot open the matlab engine!"<<endl;
		getchar();
	}
	char Buffer[BUFSIZE];
	mxArray * mpTime=NULL;	
	mpTime=mxCreateDoubleMatrix(1,SampleNum,mxREAL);	
	//memcpy((void *)mxGetPr(mpTime),(void *)Time,sizeof(Time));      //这样写是错误的!
	memcpy((void *)mxGetPr(mpTime),(void *)Time,sizeof(double)*SampleNum);
	engEvalString(ep,"clc;close all;clear all");
	engPutVariable(ep,"t",mpTime);

	Buffer[BUFSIZE-1]='\0';
	engOutputBuffer(ep,Buffer,BUFSIZE);       //显示Command Window输出
		engEvalString(ep,"t(1:10)");
	printf("%s",Buffer);
	engEvalString(ep,"T=sin(t)+0.1*randn(1,length(t));");
	engEvalString(ep,"plot(t,T,'b');hold on;plot(t,sin(t),'r');title('Example');xlabel('Time');ylabel('T');grid on");
	
	mxDestroyArray(mpTime);
	engClose(ep);
	getchar();
	//return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值