C++分段错误中的堆算法
Heap's Algorithm in C++ segmentation fault
我一直致力于实现堆算法的递归版本。下面是伪代码的链接:http://en.wikipedia.org/wiki/Heap%27s_algorithm
在递归部分之前,一切都很顺利。我知道我还没有交换元素,但我还没到那一步。运行失败而没有显示错误,直到我使用gcc调试器,它告诉我有一个分段错误。下面是我的代码:
#include <string>
#include <iostream>
using namespace std;
string* permute(int n, string array[2]){
if (n==1){
return array;
}
else{
for(int c=1; c<=n;c++){
permute(n--,array);
}
}
}
int main() {
string array[2]={"a","b"};
permute(2,array);
return 0;
}
撇开整个实现看起来是错误的这一事实不谈,您正在经历的运行时异常的直接原因是您对permute(2,array)
的递归调用,它最终导致堆栈溢出。发生这种情况是因为您使用n--
而不是--n
(或者更准确地说,n-1
)调用它。
尝试permute( --n, array )
您传递的是2的副本,而不是减量
必须使用前缀减法:
改变:
permute(n--,array);
:
permute(--n,array);
这样,首先递减'n',然后然后调用permute。
在第一种情况下,你从不减法,你有一个无限递归。
你不应该在递归调用中对n
进行后递减,而应该进行预递减:
permute(--n,array);
相关文章:
- 分段故障(堆芯转储)矢量
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 数组的指针从不分段故障
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 在线编译器中的分段C++没有打印消息
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 分段错误当我试图运行程序时出错
- 分段故障,合并排序算法
- 快速排序算法,一些特定输入序列的错误答案和分段错误
- 递归算法中的分段错误
- 尝试编写堆化算法 - 分段错误
- C++分段错误中的堆算法