C++段错误的问题,题目为PAT甲级1095

找不到错了,求教,感觉没有数组越界,没有爆栈,可能是map的问题,刚开始用不太会,debug找不到错很绝望

题目是PAT甲级1095
代码如下

#include<stdio.h>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>

using namespace std;

struct Car
{
    string plate_number;
    int time;
    int InorOut;
    int valid = 0;
}car[10010];

bool cmpcar(Car a, Car b)
{
    int s = a.plate_number.compare(b.plate_number);
    if (s != 0)
        return s < 0;
    else
        return a.time < b.time;
}

bool cmptime(Car a, Car b)
{
    if (a.valid != b.valid)
        return a.valid > b.valid;
    else
        return a.time < b.time;
}

int main()
{
    int N, K;
    scanf("%d %d", &N, &K);
    int i;
    for (i = 0; i < N; i++)
    {
        cin >> car[i].plate_number;
        int hh, mm, ss;
        scanf("%d:%d:%d", &hh, &mm, &ss);
        car[i].time = hh * 3600 + mm * 60 + ss;
        string ioo;
        cin >> ioo;
        if (ioo.compare("in") == 0)
            car[i].InorOut = 1;
        else
            car[i].InorOut = 0;
    }
    car[i].plate_number = "-1";

    sort(car, car + N, cmpcar);
    map<string, int> mp;
    map<string, int>::iterator it;
    int sumtime = 0;
    for (i = 0; i < N; i++)
    {
        if (car[i].plate_number.compare(car[i + 1].plate_number) == 0)
        {
            if (car[i].InorOut == 1 && car[i + 1].InorOut == 0)
            {
                sumtime = sumtime + car[i + 1].time - car[i].time;
                car[i].valid = 1;
                car[i + 1].valid = 1;
            }
        }
        else
        {
            mp[car[i].plate_number] = sumtime;
            sumtime=0;
        }
    }
    /////////////////////////////////////////////////////////////
    sort(car, car + N, cmptime);
    int k = 0;
    int carnum = 0;
    for (i = 0; i < K; i++)
    {
        int H, M, S;
        scanf("%d:%d:%d", &H, &M, &S);
        int Time = H * 3600 + M * 60 + S;
        while (car[k].time <= Time)
        {
            if (car[k].valid == 1)
            {
                if (car[k].InorOut == 1)
                    carnum++;
                else
                    carnum--;
            }
            k++;
        }
        printf("%d\n", carnum);
    }
    ////////////////////////////////////////////////////////////
    int maxnum = 0;
    int max = 0;
    for (it = mp.begin(); it != mp.end(); it++)
    {
        if (it->second > max)
            max = it->second;
    }
    for (it = mp.begin(); it != mp.end(); it++)
    {
        if (it->second == max)
            cout << it->first << " ";
    }
    printf("%02d:%02d:%02d", max / 3600, max % 3600 / 60, max % 60);
}

测试点1和2一直报段错误

2个回答

找到错误了,将map定义放在main外即可,猜测是由于数据太多,而map是在main分配的堆栈中导致爆栈

我用vs2013 编译运行后 没有报错吧 兄弟

weixin_40237617
会飞的木木 回复一笑照夜: ok
大约一年之前 回复
erwugumo
一笑照夜 回复会飞的木木: 找到错误了,将map定义放在main外即可,猜测是由于数据太多,而map是在main分配的堆栈中导致爆栈
大约一年之前 回复
erwugumo
一笑照夜 回复会飞的木木: VS2015,没有return不影响的,代码我自己跑也没问题,只是网站上五个测试点中有两个过不去,报段错误
大约一年之前 回复
weixin_40237617
会飞的木木 你的编译环境 是什么 你的main中没有return
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问