簡體   English   中英

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM