Ошибка 0xC0000005 с++ [закрыт]

102
17 июня 2019, 23:40

Код:

#include <bits/stdc++.h>
using namespace std;
#define fn(i,n) for(int i=0; i< int(n); i++)
const int   INF=1e9+1;
double Pi=3.14159265359;
#define F first
#define S second
#define all(a) a.begin(),a.end()
typedef long long ll;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    int n,m;
    fin>>n>>m;
    vector<int> a(n),b(m);
    fn(i,n)fin>>a[i];
    fn(i,m)fin>>b[i];
    vector<int> ans;
    bool last;
    int i=a.size()-1,j=b.size()-1;
    while(!(i==j && i==-1)){
        bool tp1=((i%2==1 || i==-1)?0:1);
        bool tp2=((j%2==1 || j==-1)?0:1);
        bool tp=(tp1!=tp2?1:0);
        int mn;
        if(i>=0 && j>=0)
            mn=min(a[i],b[j]);
        else mn=(i!=-1?a[i]:b[j]);
        if((i==a.size()-1 && j==b.size()-1) || tp!=last)
            ans.push_back(mn);
        else
            ans[ans.size()-1]+=mn;
        if(mn==a[i])i--;
        else a[i]-=mn;
        if(mn==b[j])j--;
        else b[j]-=mn;
        last=tp;
    }
    if(last==false)
        ans.resize(ans.size()-1);
    reverse(all(ans));
    fn(z,ans.size()){
        if(z==ans.size()-1)
            fout<<ans[z];
        else
            fout<<ans[z]<<" ";
    }
    return 0;
}

При вводе теста:

3 4
12550 68316 99658
79647 97673 35501 43437

В файл input.txt программа выдает ошибку 0xC0000005 на стадии удаления вектора.

Как избавиться от данной ошибки?

Answer 1

Воткнем в ваш код немного assert'ов и обнаружим тут же выход за пределы диапазона:

    if(mn==a[i])i--;
    else {
        assert(i < a.size());
        a[i]-=mn;
    }

А почему и как это исправить - это вы уж в своем C00l-коде разберитесь самостоятельно. Понимать, что именно он делает, только по вашему исходнику (в котором уже найдена как минимум одна ошибка), без описания поставленной задачи - увольте, телепатия сегодня с утра по погодным условиям не работает... :)

READ ALSO
is inaccessible within this context

is inaccessible within this context

Пишу текстовую игруПеренес общие функции в другой класс и возникла ошибка

124
Сложить 50 чисел как в математике [закрыт]

Сложить 50 чисел как в математике [закрыт]

Сложить 50 чиселЕсли сложение не удалось то написать сообщение об ошибке

112
Как передать аргумент в std::thread по ссылке?

Как передать аргумент в std::thread по ссылке?

Как передать аргумент функции в std::thread по ссылке? Хоть моя функция принимает параметр по ссылке, но похоже, что объекты всё равно разные

116