运行简单的.oct文件时Octave崩溃,我的代码出了什么问题?
Octave crashes when running simple .oct file, what is wrong in my code?
我在编写更长更复杂的程序(FEM Solver(时发现了这个问题,但为了解决它,我开始删除代码,直到我有了这个以同样方式崩溃的简单示例。
下面的 .oct 文件大约在1 次中崩溃 4 次,但它是随机的,有时它可以运行 50 次而不会崩溃。当它崩溃时,它会在没有警告的情况下关闭 Octave,因此我无法调试它。(我拥有的具有更多变量的较大代码在大约 80% 的时间内崩溃(。
我已经在 Windows 5.1.0x5.1.0 和 5.1.1(非官方(以及至少一台其他计算机上尝试过这个。我在 CLI 或 GUI 模式下运行 Octave 也没有关系。
我希望我犯了一些简单的错误...但我似乎找不到它。
.m 脚本用于检查何时崩溃:
for i = 1:50
a = test7(5)
end
test7.cc 编译为 .oct 的文件:
#include <octave/oct.h>
DEFUN_DLD (test7, args, nargout,
"Test code that crashes...")
{
if (args.length () != 1) {
print_usage ();
return octave_value();
}
const int N = args(0).int_value();
const int savesTot = 500000;
int iter = 0;
//Declaration method 1 (also crashes)
//OCTAVE_LOCAL_BUFFER (double, Q, N);
//Declaration method 2 (also crashes)
//double *Q = new double(N);
//Declaration method 3 (crashes)
NDArray Q_o (dim_vector (N,1));
double *Q = Q_o.fortran_vec();
//Q_o(0) = 1.1; // Calling NDArray class (also crashes)
Q[0] = 1.1; // Calling pointer to raw data directly (faster)
while (iter < savesTot) {
for (int i = 0; i<N; i++) {
if (i == 0) {
//Q_o(i+1) = 1.0;
Q[i+1] = 1.0;
} else if ( i == (N-1) ) {
//Q_o(i+1) = 2.0;
Q[i+1] = 2.0;
} else {
//Q_o(i+1) = 3.0;
Q[i+1] = 3.0;
}
}
iter++;
OCTAVE_QUIT; // Check if user has pressed Ctrl+C
}
octave_value_list retval; // Define return list (can contain many variables)
retval(0) = iter;
if (! error_state) { return retval; }
return octave_value_list ();
}
test7.cc 编译为在 Windows 10 x64 上的 Octave 5.1.1 或 5.1.0 中测试7.oct,使用以下命令:
mkoctfile test7.cc
你的问题是你写出了界限:
for (int i = 0; i<N; i++) {
//...
Q[i+1] = 3.0;
//...
}
您可能希望循环i=1; i<N; i++
并索引Q[i]
,或循环i=0; i<N-1; i++
。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 0-1背包代码中的错误.我的代码中有什么错误
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 无法在我的堆排序代码中找到错误.无法正确执行.C++
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 为什么我的 BaseClass:Method 代码编译(带有单冒号)?
- 我的代码运行良好,但在游戏循环中中断
- 8谜题代码.我的队列没有填充,我找不到错误的位置