Я упаковываю код C ++ в Matlab, используя mex интерфейс C ++.Хотя компиляция прошла успешно, Matlab падает при запуске функции в коде, и я не понимаю, что ее вызывает!Я использую Matlab 2019a, и я использую следующий код
#include "mex.hpp"
#include "mexAdapter.hpp"
#include "RBergomi.h"
using namespace matlab::mex;
using namespace matlab::data;
class MexFunction : public matlab::mex::Function {
public:
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
Vector H(1);
H= Vector { 0.07};
Vector eta(1);
eta= Vector { 1.9};
Vector rho(1) ;
rho= Vector { -0.9};
Vector T(1) ;
T = Vector { 1.0};
Vector K(1) ;
K= Vector { 1.0 };
double xi = 0.0552;
int N = 2;
long M = 1;
Vector W1(2);
W1= Vector { 1.0, 0.0};
Vector W1perp(2);
W1perp = Vector { 1.0 ,0.0};
RBergomiST Obj=RBergomiST(xi, H, eta, rho, T, K, N, M);
double RB;
price(RB, Obj, W1, W1perp );
outputs[0][0] = RB;
}
void price(double RB, RBergomiST Obj, const Vector& W1, const Vector& W1perp) {
RB=Obj.ComputePayoffRT_single(W1, W1perp);
}
};
Для компиляции я сделал
mex -g Bergomi_interface.cpp -lfftw3 RBergomi.cpp ParamTot.cpp BlackScholes.cpp
, который прошел успешно, но у меня происходит сбой Matlab и это сообщение при запускеэто.
Я попытался проверить, есть ли у меня утечка памяти с Valgrind, и я получил этот окончательный результат после устранения некоторых утечек памяти, но Matlab все еще падает.
== 6751 ==Memcheck, детектор ошибок памяти
== 6751 == Copyright (C) 2002-2015 и GNU GPL'd, Джулиан Сьюард и др.
== 6751 == Использование Valgrind-3.11.0 и LibVEX;повторите с ключом -h для получения информации об авторских правах
== 6751 == Команда: ./RBergomi
== 6751 ==
== 6751 ==
== 6751 == РЕЗЮМЕ КАРТЫ:
== 6751 == используется на выходе: 72 704 байта в 1 блоках
== 6751 == общее использование кучи: 1 455 распределений, 1 454 освобожденияВыделено 368 936 байт
== 6751 ==
== 6751 == 72 704 байта в 1 блоках все еще доступны в записи потерь 1 из 1
== 6751 == at 0x4C2DB8F: malloc (в / usr / lib / valgrind / vgpreload_memcheck-
amd64-> linux.so)
== 6751 == по 0x52C1EFF: ???(в / usr / lib / x86_64-linux-
gnu / libstdc ++. so.6.0.21)
== 6751 == по 0x40106C9: call_init.part.0 (dl-init.c: 72)
== 6751 == по 0x40107DA: call_init (dl-init.c: 30)
== 6751 == по 0x40107DA: _dl_init (dl-init.c: 120)
== 6751 == по 0x4000C69: ???(в /lib/x86_64-linux-gnu/ld-2.23.so)
== 6751 ==
== 6751 == РЕЗЮМЕ УТЕЧКИ:
==6751 == определенно потеряно: 0 байтов в 0 блоках
== 6751 == косвенно потеряно: 0 байтов в 0 блоках
== 6751 == возможно потеряно: 0 байтов в 0 блоках
== 6751 == все еще достижимо: 72 704 байта в 1 блоке
== 6751 == подавлено: 0 байтов в 0 блоках
== 6751 ==
== 6751 == Для подсчета обнаруженных и подавленных ошибок повторно запустите: -v
== 6751 == РЕЗЮМЕ ОШИБКИ: 0 ошибок из 0 контекстов (подавлено: 0 из 0)