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, и эта строка кажется мне действительно странной...