use*_*926 9 c++ matlab octave visual-c++
我正在尝试使用Octave和Visual C++.
我已经下载了octave-3.6.1-vs2010-setup-1.exe.创建了一个新项目,添加了octave include文件夹以包含路径,octinterp.lib并添加octave.lib到lib路径,我添加了Octave bin文件夹作为运行目录.
该程序编译并运行正常,除了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;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我自己尝试过,问题似乎源于这feval条线.
现在我没有解释为什么,但问题是通过简单地切换到"Release"配置而不是配置来解决的"Debug".
我Octave3.6.1_vs2010在WinXP上使用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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
x =
0.165897
0.0239711
0.957456
0.830028
0.859441
0.513797
0.870601
0.0643697
0.0605021
0.153486
Run Code Online (Sandbox Code Playgroud)