9

Visual C++ で Octave を使用しようとしています。

ダウンロードしましoctave-3.6.1-vs2010-setup-1.exeた。新しいプロジェクトを作成し、octaveincludeフォルダーをインクルード パスoctinterp.liboctave.liblib パスに追加し、Octavebinフォルダーを実行ディレクトリとして追加しました。

fevalプログラムは、例外を引き起こす関数を除いて、正常にコンパイルおよび実行されます。

Microsoft C++ 例外: メモリ位置 0x0012faef の octave_execution_exception

そしてオクターブ側:

サイズ変更操作が無効であるか、範囲外の配列要素へのあいまいな割り当てです。

私は何を間違っていますか?


スタンドアロン プログラムのコード:

#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;
}

前もって感謝します。

4

2 に答える 2

7

自分で試してみましたが、問題はfeval回線に起因しているようです。

理由はわかりませんが、"Release"設定ではなく設定に切り替えるだけで問題は解決しました"Debug"

Octave3.6.1_vs2010WinXP上のVS2010でビルドを使用しています。

これが私がテストしたコードです:

#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
于 2012-06-24T05:57:48.547 に答える
1

実際には次の行を指すのをやめ、エラーは実際にはこの行にあると思います:

f_arg(0) = octave_value(NumRands);

ベクトルから値 (どの値?) を取得しようとしていて、それをベクトルとして定義されていないベクトルの要素 0 に代入しようとしているようです。

よくわかりませんが...そのようなオクターブコードを書いたことは一度もありません。コードを標準のmatlab / octaveコードに変換して解決しようとしているところですが、その行は私には本当に奇妙に思えます...

于 2012-06-21T21:25:39.910 に答える