• 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++

0 głosów
48 wizyt
pytanie zadane 13 czerwca 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 przez Chess Maniak (51,510 p.)
edycja 14 czerwca 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 przez Criss VIP (146,500 p.)
W czym miało by pomóc dodanie niepotrzebnych nawiasów?
komentarz 14 czerwca 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 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 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 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 przez Chess Maniak (51,510 p.)
edycja 14 czerwca 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ź 87 wizyt
0 głosów
2 odpowiedzi 181 wizyt
pytanie zadane 23 września 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 46 wizyt
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

54,442 zapytań

98,326 odpowiedzi

202,258 komentarzy

26,743 pasjonatów

Przeglądających: 132
Pasjonatów: 3 Gości: 129

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...