• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

process exited duo to signal 11 c++

Object Storage Arubacloud
0 głosów
4,461 wizyt
pytanie zadane 13 czerwca 2018 w C i C++ przez RedBull9k Nowicjusz (120 p.)

Witam , próbuję rozwiązać zadanie z byłej olimpiady informatycznej. Tresc nie jest tu wazna, fragment ktory zamieszcze jest jedynie wycinkiem kodu, ale wiem na 100% ze to on nie dziala. Problem przedstawia sie tak ze program dla wiekszosci testow daje poprawne odpowiedzi, jednak czasami pojawia sie komunikat :"process exited duo to signal 11 c++". Chciałbym wiedziec gdzie w kodzie pojawia sie blad, poniewaz wydaje mi sie ze wszystko powinno dzialac bez zarzutu. Prawdopobnie blad znajduje sie w funkcji "Funkcja", ale pewien nie jestem. Z góry dzieki, ponizej zamieszczam kod:

#include <iostream>
#include <bits/stdc++.h>

using namespace std;



struct wektor
{
    double x;
    double y;
};

bool Funkcja(wektor a, wektor b)
{

    if(a.y==0) return 1;
    if(b.y==0) return 0;
    else return ((a.x/a.y)>(b.x/b.y));
}
int main()
{
    long long wynik=0;
    long long x,y;
    x=0; y=0;
    int n;
    cin>>n;
    wektor * lista;
    lista=new wektor[n];
    for(int i=0;i<n;i++)
    {
        cin>>lista[i].x;
        cin>>lista[i].y;
    }
    wektor * pomoc;
    pomoc=new wektor[n];
    for(int i=0;i<n;i++)
    {
        pomoc[i].x=lista[i].x;
        pomoc[i].y=lista[i].y;
    }

    for(int i=0;i<n;i++)
    {
        if(pomoc[i].y<0 || (pomoc[i].y==0 && pomoc[i].x<0))
        {
            x+=pomoc[i].x;
            y+=pomoc[i].y;
            pomoc[i].x=pomoc[i].x*(-1);
            pomoc[i].y=pomoc[i].y*(-1);

        }
        if(x*x+y*y>wynik) wynik=x*x+y*y;
    }
    wektor d;
    vector <wektor> a;
    for(int i=0;i<n;i++)
    {
        if(pomoc[i].x>0)
        {

            d.x=pomoc[i].x;
            d.y=pomoc[i].y;
            a.push_back(d);
        }
    }
    sort(a.begin(),a.end(),Funkcja);




    cout<<wynik;

    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 13 czerwca 2018 przez Chess Szeryf (76,710 p.)
edycja 14 czerwca 2018 przez Chess

Zamień to:

bool Funkcja(wektor a, wektor b)
{
 
    if(a.y==0) return 1;
    if(b.y==0) return 0;
    else return ((a.x/a.y)>(b.x/b.y));
}

na to:

bool Funkcja(wektor a, wektor b)
{
 
    if(a.y==0) return 1;
    if(b.y==0) { 
       return 0;
    } else return ((a.x/a.y)>(b.x/b.y));
}

Może wychodzisz za dozwolony zakres tablic, czy coś. Może odwołujesz się do niezadeklarowanego miejsca  w pamięci. U mnie na Windows 10 nie wyrzuciło jeszcze takiego błędu, co Tobie.

https://sio2.mimuw.edu.pl/c/oi21-1/forum/2/125/

To mi się wydaje podejrzane:

 for(int i=0;i<n;i++)
    {
        if(pomoc[i].y<0 || (pomoc[i].y==0 && pomoc[i].x<0))
        {
            x+=pomoc[i].x;
            y+=pomoc[i].y;
            pomoc[i].x=pomoc[i].x*(-1);
            pomoc[i].y=pomoc[i].y*(-1);
 
        }
        if(x*x+y*y>wynik) wynik=x*x+y*y;
    }

https://4programmers.net/Forum/Newbie/169390-c++_olimpiada_informatyczna_

komentarz 14 czerwca 2018 przez criss Mędrzec (172,590 p.)
W czym miało by pomóc dodanie niepotrzebnych nawiasów?
komentarz 14 czerwca 2018 przez RedBull9k Nowicjusz (120 p.)
Faktycznie, w niczym to nie pomoglo. Pragne dodac ze n<=200000 wiec nie jest to problem dotyczace rezerwacji zbyt duzej ilosci pamieci. Wciaz potrzebuję pomocy ;(
komentarz 14 czerwca 2018 przez RedBull9k Nowicjusz (120 p.)

Co jest nie tak z tym drugim przytozonym przez Ciebie fragmentem?

Edit: po usuniecia tego fragmentu mniej testow wywala ten blad ale wciaz.

komentarz 14 czerwca 2018 przez RedBull9k Nowicjusz (120 p.)

@Chess, Nawet taki kod daje ten sam blad:

#include <iostream>
#include <bits/stdc++.h>

using namespace std;



struct wektor
{
    double x;
    double y;
};

bool Funkcja(wektor a, wektor b)
{

    if(a.y==0) return 1;
    if(b.y==0) {
       return 0;
    } else return ((a.x/a.y)>(b.x/b.y));
}
int main()
{
    long long wynik=0;
    int n;
    cin>>n;
    wektor * lista;
    lista=new wektor[n];
    for(int i=0;i<n;i++)
    {
        cin>>lista[i].x;
        cin>>lista[i].y;
    }
    wektor d;
    vector <wektor> a;
    a.clear();
    for(int i=0;i<n;i++)
    {

        {

            d.x=lista[i].x;
            d.y=lista[i].y;
            a.push_back(d);
        }
    }
    sort(a.begin(),a.end(),Funkcja);
    delete [] lista;



    cout<<wynik;

    return 0;
}

 

komentarz 14 czerwca 2018 przez RedBull9k Nowicjusz (120 p.)

Ten kod nie daje juz bledu. Usuniecie 2 linijek z funkcji Funkcja naprawia go. Pytanie, dlaczego?

Ten kod dziala:

#include <iostream>
#include <bits/stdc++.h>

using namespace std;



struct wektor
{
    double x;
    double y;
};

bool Funkcja(wektor a, wektor b)
{
       
       return ((a.x/a.y)>(b.x/b.y));
}
int main()
{
    long long wynik=0;
    int n;
    cin>>n;
    wektor * lista;
    lista=new wektor[n];
    for(int i=0;i<n;i++)
    {
        cin>>lista[i].x;
        cin>>lista[i].y;
    }
    wektor d;
    vector <wektor> a;
    a.clear();
    for(int i=0;i<n;i++)
    {

        {

            d.x=lista[i].x;
            d.y=lista[i].y;
            a.push_back(d);
        }
    }
    sort(a.begin(),a.end(),Funkcja);
    delete [] lista;



    cout<<wynik;

    return 0;
}

 

komentarz 14 czerwca 2018 przez Chess Szeryf (76,710 p.)
edycja 14 czerwca 2018 przez Chess
if(a.y==0) {
	return 1;
} else if(b.y==0) {
	return 0;
} else {
	return ((a.x/a.y)>(b.x/b.y));
}

Nie wiem, czy oto Ci chodzi, bo Twój wcześniejszy kod dla takich danych:
 

a.y = 0;
b.y = 0;

wyrzucał chyba zawsze zero, bo nie miałeś else if'a i drugi if nadpisywał dane z pierwszego if'a. Skąd bierzesz te wartości do funkcji? cin'em, czy jak. Dlaczego przy wywoływaniu funkcji nie podajesz jej argumentów? Dla testu powywoływuj funkcję Funkcja w różnych miejscach i zobacz jakie wyrzuca wartości dla różnych liczb.

Podobne pytania

0 głosów
1 odpowiedź 494 wizyt
pytanie zadane 17 października 2021 w C i C++ przez Xodi Początkujący (260 p.)
0 głosów
1 odpowiedź 290 wizyt
pytanie zadane 28 sierpnia 2023 w C i C++ przez Dudziu Nowicjusz (120 p.)
0 głosów
1 odpowiedź 209 wizyt

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...