2016-04-16 7 views
0

uint64_tのtypedef以外の "set_type"という名前のデータ構造体に設定されたビット数に基づいてセカンダリソートを実行しようとしています。何がうまくいかないでしょうか?とにかく、文return(n1> n2)を削除すると、コードは完全に実行されます。しかし、SETにはノードをdouble値の昇順に、SET_TYPEで設定したビット数の降順に格納したい。セグメンテーションフォールト:セカンダリソートSET C++で11

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; 
    } 
}; 
+1

[mcve]を表示してください。 –

答えて

0

あなたの質問は完全ではありません。 set_typeの定義を質問から外しました。将来的には、質問を作成する際に、自己完結型のプログラムを作成してください。他のものとは別に、最小限のプログラムを作成することで、問題がどこにあるかを理解することができます。

この回答の他のすべては純粋な推測です。

まず、私は比較ラインがsegfaultingではないことを賭けるつもりです。これは、最適化なしでプログラムをコンパイルし、デバッガで実行することで簡単に確認できます。私はコンパイラが一度あなたがその行が削除されたときにクラッシュしない理由です比較を削除するすべてを最適化すると思います。

第2に、私は問題がset_typeの定義の内側にあると賭けています。 rule of threeを無視した可能性があります。明示的に無効にしない限り、C++クラスにはデフォルトのコピーコンストラクタがあることを忘れてしまいます。

あなたの質問に答えられていない場合は、最小のコンパイル例を作成し、新しい質問を投稿してください。

関連する問題