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

626 Obżartuchy - Segmentation fault

Object Storage Arubacloud
+1 głos
181 wizyt
pytanie zadane 18 czerwca 2018 w SPOJ przez Fernokip Nowicjusz (180 p.)
otagowane ponownie 19 czerwca 2018 przez Fernokip

Czy ktoś mógłby zasugerować co robię źle w tym zadaniu? Po kilku próbach, w tym usunięciu biblioteki <math.h>, która była potrzebna do użycia ceil i floor ( kod też trochę zmieniłem), sędzia mówi mi, że źle wykonuję zadanie, w sensie - Błąd wykonania (SIGSEGV). Nie rozumiem o co chodzi z tym naruszeniem ochrony pamięci (segmentation fault). Oto mój kod:

#include <iostream>

using namespace std;
int doba = 86400;
int t[100];     //czas zjedzenia ciastka
int n,m;    //n-ile obzartuchow, m-ile ciastek w pudelku
double sr[100]; //ile ciastek zje obzartuch w ciagu doby
int ile;    //suma-najpierw ciastek, a potem pudelek
int r;      //ile razy ma sie wykonac test


int main()
{
	cin>>r;
    for(int i=0;i<r;i++)
    {
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {cin>>t[i];

    sr[i]=(doba/t[i]);
    }
    ile=0;
        for(int i=0;i<n;i++)
        {
           ile+=sr[i];
        }

    if(ile%m==0) ile=ile/m;
    else ile=(ile/m)+1;

cout<<ile<<endl;
}
    return 0;
}

 

komentarz 18 czerwca 2018 przez Mariusz08 Maniak (62,300 p.)
Zła kategoria
komentarz 18 czerwca 2018 przez Fernokip Nowicjusz (180 p.)
edycja 18 czerwca 2018 przez Fernokip
Przepraszam, pierwszy raz korzystam z jakiegokolwiek forum.

1 odpowiedź

+2 głosów
odpowiedź 18 czerwca 2018 przez Michał Muzyka Pasjonat (24,080 p.)
wybrane 18 czerwca 2018 przez Fernokip
 
Najlepsza
cin>>r;
for(int i=0;i<r;i++) //iterator i
{
    cin>>n>>m;
    for(int i=0;i<n;i++) //iterator i, występuje konflikt z tym wyżej
    {
        cin>>t[i];
        sr[i]=(doba/t[i]);
    }
    ile=0;
    for(int i=0;i<n;i++) //iterator i, występuje konflikt z pierwszą pętlą
    {
        ile+=sr[i];
    }
    if(ile%m==0) ile=ile/m;
    else ile=(ile/m)+1;
 
    cout<<ile<<endl;
}

uporządkujmy najpierw kod,

nie możesz używać tej samej zmiennej w zagnieżdżonej pętli, ponieważ zmieniasz wartość tej pierwszej co może oznaczać że wychodzisz poza zakres:

zmień nazwę zmiennej w pierwszej pętli np. na k

komentarz 18 czerwca 2018 przez Fernokip Nowicjusz (180 p.)

Zmieniłem nazwy iteratorów, ale nadal pojawia się ten sam problem :/

#include <iostream>

using namespace std;
int doba = 86400;
int t[100];     //czas zjedzenia ciastka
int n,m;    //n-ile obzartuchow, m-ile ciastek w pudelku
double sr[100]; //ile ciastek zje w ciagu doby
int ile;    //suma
int r;      //ile razy ma sie wykonac test


int main()
{
	cin>>r;
    for(int k=0;k<r;k++)     //zmienilem iterator na k, tak jak powiedziales 
    {
    cin>>n>>m;
    for(int i=0;i<n;i++)     //tutaj zostawilem i
    {cin>>t[i];

    sr[i]=(doba/t[i]);
    }
    ile=0;
        for(int j=0;j<n;j++)    //tutaj zmienilem iterator na j
        {
           ile+=sr[j];
        }

    if(ile%m==0) ile=ile/m;
    else ile=(ile/m)+1;

cout<<ile<<endl;
}
    return 0;
}

 

1
komentarz 19 czerwca 2018 przez RafalS VIP (122,820 p.)
Nie chce mi się tego robić, ale dodaj sobie proste ify w każdym miejscu gdzie używasz tablica[indeks] sprawdzające czy indeks nie jest większy niż rozmiar tablicy, bo taki błąd sugeruje właśnie wyjście poza zakres tablicy.
1
komentarz 19 czerwca 2018 przez RafalS VIP (122,820 p.)

Rzuciłem okiem na zadanie:

(1 ≤ N ≤ 10.000, 1 ≤ M ≤ 1.000.000.000).

 

int t[100];     //czas zjedzenia ciastka
....
for(int i=0;i<n;i++)     //tutaj zostawilem i
{cin>>t[i];

Oczywisty błąd, tablica t ma pomieścić 10 000 czasów a jej pojemnośc to 100.

Podobne pytania

0 głosów
1 odpowiedź 278 wizyt
pytanie zadane 4 listopada 2017 w SPOJ przez PanJaqb Początkujący (360 p.)
0 głosów
1 odpowiedź 379 wizyt
–1 głos
1 odpowiedź 506 wizyt
pytanie zadane 13 lipca 2018 w SPOJ przez Bloom55 Użytkownik (660 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 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!

...