递归函数偶尔会返回分段错误

Recursive function occasionally returns a segmentation fault

本文关键字:分段 错误 返回 偶尔 递归函数      更新时间:2023-10-16

我正在实现一个分治算法,它可以找到最接近彼此的两个点以及它们之间的距离。我的最终解决方案找到了正确的答案(与使用暴力相比),但大约1/3的时间会返回分割错误。我一直在努力解决这个问题几天了,现在,在这里和那里添加打印语句,但找不到这个问题。如果有人能看一下我的代码,我会很感激的。

你的"divide"循环假设XY具有相同数量的元素。如果Y少于X,您将遇到未定义的行为,这可能是有趣的结果或崩溃。

尝试更改向量的访问方法。向量下标操作符似乎在一些编译器/平台上有一个不稳定的行为(至少从我的角度来看)。我认为这个问题来自于它是一个链表,导致在内存中是非连续的,但这只是一个猜测。 (EDIT: std::vector在内存中是连续的,问题是别的)尝试使用迭代器代替(使用auto关键字容易),例如:

for (auto iter = Yprime.begin(); iter != Yprime.end(); iter++) {
    // Your code here
}

希望这对你的情况有效!