爱吃的鱼儿 2021-11-26 23:44 采纳率: 0%
浏览 768

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

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

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

我想要达到的结果

程序能够运行。谢谢大家

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-11-27 06:26
    关注

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

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 11月26日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!