std::out_of_range - proszę o pomoc

Odpowiedz Nowy wątek
2015-01-02 19:15
0

Witam mam problem z kodem, w który chyba polega na tym, że program odnosi się do elementu spoza zakresu wektora, ale nie mogę znaleźć błędu. Proszę o pomoc ew. radę dotyczącą kodu jeśli ktoś widzi jak można zwalczyć ten problem.
Z pozdrowieniami,
theCember

http://pastebin.com/kNk3HrJB , ewentualnie:

#include <iostream>
#include <cstring>
#include <cctype>
#include <iomanip>
#include <vector>
#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#define N 200

using namespace std;

class zad
{
public:
    int zadanie;
    int operacja;
    int czas_trwania;
    bool czy_mozna;
    int miejsce_przerwy;
};
vector<zad> maszyna1;
vector<zad> maszyna2;
vector<zad> przerwy;
vector<int> rozw1;
vector<int> rozw2;

void generator()
{
    int suma_czasow=0;
    float liczba_przerw=0.0;
    int liczba_przerw1=0;
    for(int i=0; i<N; i++)
    {
        int a=(rand()%80)+20;
        maszyna1.at(i).czas_trwania=a;
        maszyna1.at(i).czy_mozna=1;
        maszyna1.at(i).zadanie=i;
        maszyna1.at(i).operacja=1;
        int b=(rand()%80)+20;
        maszyna2.at(i).czas_trwania=b;
        maszyna2.at(i).czy_mozna=1;
        maszyna2.at(i).operacja=2;
        maszyna2.at(i).zadanie=i;
    }
    for(int i=0; i<maszyna1.size(); i++)
    {
        suma_czasow=suma_czasow+maszyna1.at(i).czas_trwania+maszyna2.at(i).czas_trwania;
    }
    cout<<"Suma czasow: "<<suma_czasow;
    suma_czasow=suma_czasow/0.45;
    liczba_przerw=0.1*N;
    liczba_przerw1=(int)liczba_przerw;
    for(int i=0; i<liczba_przerw; i++)
    {
        przerwy.at(i).czas_trwania=(rand()%80)+20;
        przerwy.at(i).czy_mozna=0;
        przerwy.at(i).zadanie=-1;
        przerwy.at(i).operacja=(rand()%2)+1;
        przerwy.at(i).miejsce_przerwy=rand()%suma_czasow;
    }
    for(int j=0; j<N; j++)
    {
        int a=rand()%maszyna1.size();
        for(int i=rozw1.size(); i<(rozw1.size()-1)+maszyna1.at(a).czas_trwania; i++)
        {
            rozw1.at(i)=maszyna1.at(a).zadanie;
            maszyna1.erase(maszyna1.begin()+a);
        }
        int b=rand()%maszyna2.size();
        for(int i=rozw2.size(); i<(rozw2.size()-1)+maszyna2.at(a).czas_trwania; i++)
        {
            rozw2.at(i)=maszyna2.at(b).zadanie;
            maszyna2.erase(maszyna2.begin()+b);
        }
    }
    int tmp;
    for(int i=0; i<liczba_przerw; i++)
    {
        if(przerwy.at(i).operacja==1)
        {
            for(int j=przerwy.at(i).miejsce_przerwy; j<przerwy.at(i).miejsce_przerwy+przerwy.at(i).czas_trwania; j++)
            {
                rozw1.push_back(przerwy.at(i).zadanie);
                tmp=rozw1.at(j);
                rozw1.at(j)=rozw1.at(rozw1.size()-1);
                rozw1.at(rozw1.size()-1)=tmp;
            }
        }
        else if(przerwy.at(i).operacja==2)
        {
            for(int j=przerwy.at(i).miejsce_przerwy; j<przerwy.at(i).miejsce_przerwy+przerwy.at(i).czas_trwania; j++)
            {
                rozw2.push_back(przerwy.at(i).zadanie);
                tmp=rozw2.at(j);
                rozw2.at(j)=rozw2.at(rozw2.size()-1);
                rozw2.at(rozw2.size()-1)=tmp;
            }
        }
    }

}
int main()
{
    srand (time(NULL));
    generator();
    cout <<rozw2.at(5);

}

Pozostało 580 znaków

2015-01-02 19:21
0

Debuger w dłoń.
Twoim największym problemem jest fakt, że tylko udajesz, że piszesz W C++

edytowany 1x, ostatnio: spartanPAGE, 2015-01-02 19:21

Pozostało 580 znaków

2015-01-02 19:25
1

Serio?

Position of an element in the container.
If this is greater than or equal to the vector size, an exception of type out_of_range is thrown.

z http://www.cplusplus.com/reference/vector/vector/at/

A ile elementów mają te twoje PUSTE vectory? Bo ja myśle że całe 0. Więc zgodnie z oczekiwaniami cośtam.at(i) dla dowolnego i rzuca ci out_of_range. Nie wiem czego się niby spodziewałeś.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.
edytowany 1x, ostatnio: Shalom, 2015-01-02 19:26

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0