MATLAB-C 接口:内存上的访问冲突错误

MATLAB-C interfacing: Access violation error on memcpy

本文关键字:访问冲突 错误 内存 接口 MATLAB-C      更新时间:2023-10-16

我正在尝试将C++代码与MATLAB连接起来。我只想使用 memcpy 将变量复制到 MATLAB 数组中。但这会导致访问冲突错误:

MATLAB_C_connection.exe:0xC0000005:访问冲突写入位置0x00000000 0x009a1043未处理的异常。

这是我正在使用的C++代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <matrix.h>
#include "engine.h"
#include "coupled_cfd.h"
#include "mex.h"
#include "mclmcr.h"
#include "mclmcrrt.h"
#include "mclcppclass.h"
#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "libmat.lib")
#pragma comment(lib, "libmex.lib")
#pragma comment(lib, "libeng.lib")
#define  BUFSIZE 256

int main()
{
    Engine *ep;
    mxArray *x = NULL, *result = NULL;
    char buffer[BUFSIZE+1];
    double var[1] = {5};
    double *destination;
    ep = engOpen(NULL); //ep = engOpen("");
    x = mxCreateDoubleMatrix(1, 1, mxREAL);
    destination = mxGetPr(x);
    memcpy(destination, var, sizeof(double));
    //engPutVariable(ep, "X", x);
    //engEvalString(ep, "D = X");
    //engEvalString(ep, "plot(X,D)");
    //engEvalString(ep, "close;");
    std::cout << var[0];
    system("PAUSE");
    mxDestroyArray(x);
    engClose(ep);
    return 1;   
}

奇怪的是,如果我在memcpy中使用&destination,代码可以编译并工作,但这并不完全是我想要的。相反,我希望将变量"var"的值复制到数组"x"中。谁能帮我。非常感谢,索海尔

x是数组类型。要获取指向矩阵数组中值位置的指针,您必须指定它。

请尝试destination = mxGetPr(x[0]);