Я пытаюсь подключить код 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
x - тип массива. Чтобы получить указатель на местоположение значения внутри матричного массива, вы должны указать его.
Попробуйте destination = mxGetPr(x[0]);
вместо.
var
является постоянным указателем на массив, поэтому значениеvar
является адресом его первого элемента. Вы говорите, что хотите скопировать адрес первого элемента вdestination
?