Octave C++ и VS2010

Я пытаюсь использовать Octave с Visual C++.

Я скачал octave-3.6.1-vs2010-setup-1.exe, Создан новый проект, добавлена ​​октава include папка для включения пути, octinterp.lib а также octave.lib в lib путь, и я добавил октаву bin папка как работающий каталог.

Программа компилируется и работает нормально, кроме feval функция, вызывающая исключение:

Microsoft C++ исключение: octave_execution_exception в ячейке памяти 0x0012faef

и на стороне Октавы:

Недопустимая операция изменения размера или неоднозначное присвоение элементу массива вне границ.

Что я делаю неправильно?


Код для отдельной программы:

#include <octave/octave.h>
#include <octave/oct.h>
#include <octave/parse.h>

int main(int argc, char **argv)
{
    if (octave_main (argc, argv, true))
    {
        ColumnVector NumRands(2);
        NumRands(0) = 10;
        NumRands(1) = 1;
        octave_value_list f_arg, f_ret;
        f_arg(0) = octave_value(NumRands);
        f_ret = feval("rand",f_arg,1);
        Matrix unis(f_ret(0).matrix_value());
    }
    else
    {
        error ("Octave interpreter initialization failed");
    }
    return 0;
}

Заранее спасибо.

2 ответа

Решение

Я попробовал это сам, и проблема, кажется, происходит от feval линия.

Теперь у меня нет объяснения, почему, но проблема была решена простым переключением на "Release" конфигурация вместо "Debug" конфигурации.

Я использую Octave3.6.1_vs2010 построить, с VS2010 на WinXP.

Вот код, который я тестировал:

#include <iostream>
#include <octave/oct.h>
#include <octave/octave.h>
#include <octave/parse.h>

int main(int argc, char **argv)
{
    // Init Octave interpreter
    if (!octave_main(argc, argv, true)) {
        error("Octave interpreter initialization failed");
    }

    // x = rand(10,1)
    ColumnVector sz(2);
    sz(0) = 10; sz(1) = 1;
    octave_value_list in = octave_value(sz);
    octave_value_list out = feval("rand", in, 1);

    // print random numbers
    if (!error_state && out.length () > 0) {
        Matrix x( out(0).matrix_value() );
        std::cout << "x = \n" << x << std::endl;
    }

    return 0;
}

с выводом:

x =
 0.165897
 0.0239711
 0.957456
 0.830028
 0.859441
 0.513797
 0.870601
 0.0643697
 0.0605021
 0.153486

Я предполагаю, что он фактически перестал указывать на следующую строку, и ошибка фактически лежит в этой строке:

f_arg(0) = octave_value(NumRands);

Кажется, вы пытаетесь получить значение (какое значение?) Из вектора, а затем присваиваете его элементу 0 вектора, который не был определен как вектор.

Я, правда, не знаю... Я никогда не пытался писать октавный код подобным образом. Я просто пытаюсь разобраться с этим, переводя код в стандартный код matlab/octave, и эта строка кажется мне действительно странной...

Другие вопросы по тегам