簡體   English   中英

分段錯誤:SET C ++ 11中的二次排序

[英]Segmentation fault:secondary sort in SET C++11

我正在嘗試根據名為“ set_type”的數據結構中設置的位數來進行二級排序,這不過是uint64_t的typedef。 可能出什么問題了? 同樣,如果刪除語句return(n1> n2),則代碼將完美執行。 但是,我想以雙精度值的升序和SET_TYPE中設置的位數的降序存儲SET中的節點。

struct setNode {
    std::pair<double,set_type> data;
};

unsigned int bitCount (set_type value) {
    unsigned int count = 0;
    while (value > 0) {           // until all bits are zero
        if ((value & 1) == 1)     // check lower bit
            count++;
        value >>= 1;              // shift bits, removing lower bit
    }
    return count;
}

struct CompClass {
    bool operator() (const setNode& lhs, const setNode& rhs) const
    {

        if (lhs.data.first == rhs.data.first) {
            int n1 = bitCount(lhs.data.second);
            int n2 = bitCount(rhs.data.second);
            return n1 > n2;**//Statement causing error**
        }
        return lhs.data<rhs.data;
    }
};

您的問題不完整。 您沒有考慮set_type的定義。 將來,在形成問題時,請創建最少的自包含程序。 除了其他方面,創建最小程序通常會使您了解問題所在。

此答案中的所有其他內容都是純猜測。

首先,我敢打賭,比較線不是唯一的斷斷續續。 通過不經過優化就編譯程序並在調試器中運行它很容易檢查。 我猜測一旦刪除比較,編譯器就會優化所有內容,這就是為什么刪除該行時它不會崩潰的原因。

其次,我敢肯定問題在於set_type的定義內。 您可能忽略了三個規則 許多人忘記了C ++類具有默認的復制構造函數,除非您明確禁用它。

如果這些都不能回答您的問題,請創建一個最小的編譯示例並發布一個新問題。

暫無
暫無

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

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