1

ログからクラッシュが発生しました:

15:21:12  1645 Wrk-0.14 | *** Break ***: segmentation violation

スタックトレースは次のとおりです。

===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================
...
#4  <signal handler called>
#5  0x00002b5eeef98865 in HiggsSelector::RejectBadJet (this=0x1de241a0, 
    index_jet=0, index_leading=0, index_subleading=1) at HiggsSelector.C:2375

関数は次のとおりです。

bool HiggsSelector::RejectBadJet(int index_jet, int index_leading, int index_subleading) const
{
    assert(index_jet >= 0);
    assert(index_leading >= 0);
    assert(index_subleading >= 0);
    assert(PV_z);
    int index_PV_ID_chosen=0; //<-----in your header
    double DiPhoton_zcommon=z_common_corrected(index_leading,index_subleading,false);
    float minimal_distance=9999;
    for (unsigned int index_PV=0;index_PV<PV_z->size()-1;index_PV++) {
      if ( fabs((*PV_z)[index_PV]-DiPhoton_zcommon)<minimal_distance) {

最後の行は番号2375です。このクラッシュがどのように発生する可能性があるのか​​、私は本当に理解していません。すべてをassertsでチェックしたと思います。PV_z*std::vector<float>

4

2 に答える 2

2

の場合PV_z->size() == 0PV_z->size()-1はにアンダーフローしUINT_MAX、forループ条件は常に真であるため、セグメンテーション違反が発生する可能性があります。

それを修正する1つの方法:

for (unsigned int index_PV=0; !PV_z->empty() && index_PV<PV_z->size()-1;index_PV++) {
                            //^^^^^^^^^^^^^^^^^^
于 2012-09-18T14:12:54.557 に答える
1

PV_zが月を指していることを破棄しないでください。これにより、アサートがバイパスされます。

于 2012-09-18T14:14:21.573 に答える