Обнаружена ошибка во время работы интерфейса C ++ MEX, который вывел из строя Matlab, хотя компиляция прошла успешно? - PullRequest
0 голосов
/ 28 мая 2019

Я упаковываю код 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)

...