Интерфейс MATLAB-C: ошибка нарушения прав доступа в memcpy

0

Я пытаюсь подключить код C++ с MATLAB. Я просто хочу скопировать переменную в массив MATLAB, используя memcpy. Но это приводит к ошибке нарушения доступа:

Необработанное исключение в 0x009a1043 в MATLAB_C_connection.exe: 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;   
}

Странно, что если я использую & destination в memcpy, код компилируется и работает, но это не совсем то, что я хочу. Вместо этого я хочу, чтобы значение переменной "var" было скопировано в массив "x". Может ли кто-нибудь помочь мне, пожалуйста. Большое спасибо, //Soheil

  • 0
    Я не понимаю, что ты пытаешься сделать. var является постоянным указателем на массив, поэтому значение var является адресом его первого элемента. Вы говорите, что хотите скопировать адрес первого элемента в destination ?
Теги:
memcpy

1 ответ

0

x - тип массива. Чтобы получить указатель на местоположение значения внутри матричного массива, вы должны указать его.

Попробуйте destination = mxGetPr(x[0]); вместо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню