【问题标题】:MATLAB-C interfacing: Access violation error on memcpyMATLAB-C 接口:memcpy 上的访问冲突错误
【发布时间】:2015-01-26 21:12:35
【问题描述】:

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

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

这是我正在使用的 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("\0");
    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”中。 谁能帮帮我。 非常感谢, //苏海尔

【问题讨论】:

  • 我不明白你在做什么。 var 是一个指向数组的常量指针,所以var 的值就是它的第一个元素的地址。你是说要将第一个元素的地址复制到destination中?

标签: c++ matlab memcpy


【解决方案1】:

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

改用destination = mxGetPr(x[0]);。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多