dlaczego pojawia sie komunikat, że program przestał działac z powodu problemu

0

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int usunac= -1;
int index, ilepar=0;
int main() {

int a;

std::cin >> a;
std::vector<double> tab(a);
for(int i = 0; i < a; ++i) {
    std::cout << "Podaj element nr " << i << ": ";
    std::cin >> tab[i];
}
int b;

std::cin >> b;
std::vector<double> z(b);
for(int x = 0; x < b; ++x) {
    std::cout << "Podaj element nr " << x << ": ";
    std::cin >> z[x];
}



std::sort(tab.begin(), tab.end());
for(int i = 0; i < a; i++)

    sort(z.begin(), z.end());
    for(int i=0; i<b; i++)


for(int i = 0; i < a; i++)
{
    for(int j = 0; j < b; j++)
    {
        if(abs(tab[i]-z[j] <= 1))
        {
             usunac = j;
             break;
        }
    }
    if(usunac > -1)
    {
        z.erase(z.begin() + index);
        ilepar++;
    }
}

cout<<ilepar;
return 0;

}

Po uruchomieniu programu moge wpisac liczby, jednak potem pojawia sie komunikat, ze program nie działa z powodu problemu. Dlaczego?

0

Jakiego 'problemu'? Co dokładnie wyświetla? I sformatuj oraz pokoloruj kod w poście...

1
for(int i = 0; i < a; i++)

    sort(z.begin(), z.end()); 

Po co sortować ten sam zakres danych w pętli a razy?

for(int i=0; i<b; i++)
    for(int i = 0; i < a; i++)
    {
        for(int j = 0; j < b; j++)
        { 

Nie bardzo wiem o co chodzi w tych pętlach. W dwóch masz i. Zakrywanie zmiennych.

Jeśli mam zgadywać to problem jest przy usuwaniu elementu z tablicy.

z.erase(z.begin() + index); 

Pętle opierają się na ustalonych z góry wartościach, które nie uwzględniają kurczącej się tablicy
i w pewnym momencie wychodzisz poza tablicę (out of range). Undefined behavior.

Rada: Jak najszybciej poznaj techniki debugowania w twoim środowisku.
Może być też uniwersalnie na piechotę

1

Jak uruchomisz aplikację w trybie debugowania to w miejscu w którym ci się wywala, pokaże ci się informacja z jakiego miejsca i poszczególne odwołania. Możesz wykonywać też program krokowo albo z breakpointami. W IDE masz takie coś jak debugger(osobna lista albo wpis w innym menu) i to jest to czego szukasz.

1

Umiejętność debuggowania kodu jest jedną z podstawowych i niezbędnych w pracy programisty.
Można albo wykorzystać opcje dostępne w swoim IDE, jak napisał kolega @recovery, można ewentualnie wstawiać logi (printf, std::cout). Można też zastosować metodę gumowej kaczuszki. Jak dojdziesz do tego gdzie program przestaje działać, można się będzie zastanawiać czemu przestaje działać.

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