1097 Deduplication on a Linked List (25 分)测试样例i2发生的段错误

这篇博客详细探讨了在C++程序中遇到的vector大小减一错误,重点在于理解为何使用vector.size() - 1会导致段错误,并提供了修复方法和预防措施。作者推荐了一篇相关博文,帮助读者避免类似问题并提升代码健壮性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<bits/stdc++.h>
using namespace std;
struct node{
    int data;
    int addr;
    int next;
}Nodes[100002];
typedef struct node Node;
vector<Node> jihe;
vector<Node> jihe1;
bool isdup[1000000] = {false};

int main(){
    int head , m;
    cin>>head>>m;
    
    for(int i = 0 ; i < m ;i++){
        int addr , data , next;
        cin>>addr>>data>>next;
        Nodes[addr].addr = addr;
        Nodes[addr].data = data;
        Nodes[addr].next = next;
    }
    int address = head;
    while(address!=-1){
        int index = abs(1.0*Nodes[address].data);
        if(!isdup[index]){
            jihe.push_back(Nodes[address]);
            isdup[index] = true;
        }else{
            jihe1.push_back(Nodes[address]);
        }
        address = Nodes[address].next;
    }
    for(int i = 0 ; i < jihe.size()-1 ; i++){
        printf("%05d %d %05d\n",jihe[i].addr,jihe[i].data,jihe[i+1].addr);
    }
    if(jihe.size()!=0)
        printf("%05d %d -1\n",jihe[jihe.size()-1].addr,jihe[jihe.size()-1].data);
    
    
    int sign = jihe1.size() - 1;
    for(int i = 0 ; i < (int)(jihe1.size()-1) ; i++){
        printf("%05d %d %05d\n",jihe1[i].addr,jihe1[i].data,jihe1[i+1].addr);
    }
    if(jihe1.size()!=0)
        printf("%05d %d -1",jihe1[jihe1.size()-1].addr,jihe1[jihe1.size()-1].data);
    
    return 0;

}

错误原因:

该开始在for循环当中使用了vector.size()-1,结果告诉发生了段错误。
直到输出vector.size()-1才发现了原因
推荐博文:[为什么会发生这样的错误](https://blog.csdn.net/struggle6688/article/details/104063577)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值