SIGSEGV why?

0

Mam program: kod.
W czym tkwi problem?

0

Skoro piszesz w C++ to wypadałoby zgodnie ze standardem. Taka deklaracja tablicy jest z nim niezgodna. Zapewne błąd jest przez to, że przepełniasz stos (jeżeli n będzie wystarczająco duże)

0

Bo int tab[n] nie jest poprawnym sposobem deklarowania tablicy, jeśli n nie jest stałą znaną na etapie kompilacji.

0

Utwórz tą tablicę o rozmiarze maksymalnym jaki może być potrzebny i zadeklaruj ją przed pętlą.

Swoją drogą to niepotrzebnie komplikujesz sobie życie tym switchem dla boola.

Typ danych też mogłeś sobie skrócić:

typedef long long unsigned int lluint;

Mógłbyś podać wejście dla którego był problem?

0

Dodatkowo kod Ci się wali na lewą stronę. Użyj funkcji.

0

Ustosunkowując się do wypowiedzi @byku_guzio i @Navi po zmianie, błąd nadal występuje...

0
  1. Jesteś pewien ze taka tablica na stosie ci się zmieści? Rozumiem ze poklócileś się z "new" ?
  2. Jesteś pewien ze wykraczasz poza tablicę?
0

a może spróbuj wysłać jakieś wejście do programu :D

0

@krwq ma racje, mam niewielką styczność z ideonem i stąd moja niewiedza.
Nie wiem dlaczego dla INputu:
3
1 10
3 5
1 100
otrzymuje zły OUTput?
Te same dane puściłem przez kompilator c::b i output jest okey.

0

a) bool arry[n+1]; // to jest źle, takie coś wrzuca się na stertę (bool* arry = new bool[n+1],delete [] arry;)
b) należy zainicjować tą tablicę true lub false, bo nie wiesz jakie wartości będą miały komórki bo zaalokowaniu pamięci
c) konstrukcja: switch (...) { case x: break; default: {} } // WTF? :

  • zastanów się co robi break, jak już to użyj continue,
  • zwykły if będzie bardziej przejrzysty
    d) lepiej liczby pierwsze obliczyc 1 raz, a pozniej korzystac z obliczonych wynikow, niz za kazdym razem je liczyc: ewentualnie można zapisać sobie dokąd są już obliczone i sprawdzać kolejne jeśli jest taka potrzeba.
0

pewnie to chciałeś napisać: http://ideone.com/581wP

0

Chodzi o zadanie link.
Niby banalne, a podczas uruchamiania pojawia się błąd SIGABRT, what the fuck?

0

Pokaż aktualny kod, bez tego nic się nie zrobi.

0

Wychodzisz poza tablicę. Daj new bool[n+1]. Nigdzie nie inicjujesz zawartości tablicy, więc większość jak nie wszystko jest tam na true (wartość różna od zera).

0

Poza tym:

  • wartość 1 000 000 000 spokojnie zmieści się w int, nie ma potrzeby używania 64-bitów
  • program może stworzyć tablicę o wielkości 1 000 000 000 bajtów, to jest prawie 1GB pamięci
  • Sito Eratostenesa jest optymalne do liczenia liczb pierwszych do 10 milionów, poszukaj sobie w google segmented sieve of eratosthenes
  • do usuwania tablic służy delete [], teraz być może wycieku nie tworzysz, ale jakbyś miał tablicę jakiś obiektów to nie zostaną wywołane ich destruktory, generalnie jest to undefined behaviour i komputer może się zepsuć
  • do tego typu zadań na spoju, gdzie jest duża ilość danych do wczytania i wyświetlenia o wiele lepiej sprawi ci się (c)stdio.
0

A czy ktoś umie przedstawić krótko w C++ sieve of Atkin? Z tego co wiem jest szybszy i bardziej optymalny.

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