【发布时间】:2017-01-18 02:28:20
【问题描述】:
我通过在mx_minimum_power.cpp 中添加以下代码创建了一个 mex 函数
#include <math.h>
#include <complex>
#include "mex.h"
#include "matrix.h"
#include "cvm.h"
#include "blas.h"
#include "cfun.h"
using std::complex;
using namespace cvm;
/* The gateway function */
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
const int arraysize = 62172;
const int matrixDimention = 3;
float *inMatrixA11 = (float *)mxGetPr(prhs[0]);
complex<float> *inMatrixA12 = (complex<float> *)mxGetPr(prhs[1]);
complex<float> *inMatrixA13 = (complex<float> *)mxGetPr(prhs[2]);
float *inMatrixA22 = (float *)mxGetPr(prhs[3]);
complex<float> *inMatrixA23 = (complex<float> *)mxGetPr(prhs[4]);
float *inMatrixA33 = (float *)mxGetPr(prhs[5]);
basic_schmatrix< float, complex<float> > A(matrixDimention);
int i = 0;
for (i = 0; i < arraysize; i++)
{
A.set(1, 1, inMatrixA11[i]);
A.set(1, 2, inMatrixA12[i]);
A.set(1, 3, inMatrixA13[i]);
A.set(2, 2, inMatrixA22[i]);
A.set(2, 3, inMatrixA23[i]);
A.set(3, 3, inMatrixA33[i]);
}
}
然后我通过在 matlab 命令行中输入以下代码创建了mx_minimum_power.mexw64。
mex -g mx_minimum_power.cpp cvm_em64t_debug.lib
但似乎set member function of basic_schmatrix class 在第 27 行 A.set(1, 1, inMatrixA11[i]); 抛出了一个 cvmexception
我真的不明白这个例外的原因,因为我在CVM0 based indexing 中使用了[1,4) 范围内的索引1,1
并且还考虑到在运行第 27 行 A.set(1, 1, inMatrixA11[i]); 之前,我们有以下 A11[0],A12[0],A13[0],A22[0],A23[0],A33[0] 的值:
正如预期的那样。
并为hermitian matrix A分配了以下内存:
【问题讨论】:
标签: c++ visual-studio exception visual-c++ visual-studio-2013