GDB调试出现这个错误:Program terminated with signal SIGSEGV, Segmentation fault.

问题遇到的现象和发生背景

运行局部搜索代码时发现的错误,是在Linux系统下,用g++编译的。我前几天跑dimacs例子,发现36个例子里,有三个例子提示了这个错误,真奇怪。

问题相关代码,请勿粘贴截图
void remove(int c){
    cs[c].is_in_c=0;
    cs[c].score=0;
    cs[c].config=0;
    cs[c].time_stamp=step;
    if( variable_cover[c]<kcovered)
    {
        uncover[uncover_num]=c;i
        index_uncover[c]=uncover_num;
        uncover_num++;
    }
}
错误信息是在 if( variable_cover[c]<kcovered)出现的

我觉得是C传过来就传错了,下面是获取C的代码,C就是maxc。我检查没有问题出现啊!


int find_best_in_c(int allowTabu){
    int i, maxc,j,k;
    int sr=INT_MIN, ct=1;
    state=0;
    for(i=0;i<vertex_num;i++){
        if(cs[i].must_in_c) continue;
        if(!cs[i].is_in_c) continue;
        if(allowTabu&&in_tabu(i)) continue;
        state=1;
        k=compare(sr,ct, cs[i].score, cs[i].cost);
        if(sr==INT_MIN||k<0){
            sr=cs[i].score;
            ct=cs[i].cost;
            maxc=i;
        } else if(k==0){
            if(cs[maxc].time_stamp>cs[i].time_stamp){
                maxc=i;
            }
        }
    }
    return maxc;
}

运行结果及报错内容

img

img

img

我的解答思路和尝试过的方法

我感觉只有这三个例子出错了,是不是意味着是例子的错误,但是我检查了例子和其他的例子构成是一样的。我想不通用同样是代码其他的例子就能跑出来,不懂就那三个例子有问题呢?

我想要达到的结果

程序能够运行。谢谢大家

应该是C有问题,数组越界访问造成的。建议maxc初始化为0

首先 你需要解释一下每个函数干什么的,其次为什么那么多全局变量,思考一下有必要吗?

把全局变量有关的操作code,全都贴出来,才能帮你分析