SIGSEGV why?

CL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

Mam program: kod.
W czym tkwi problem?

byku_guzio
  • Rejestracja: dni
  • Ostatnio: dni
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)

nav
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
0

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

R9
  • Rejestracja: dni
  • Ostatnio: dni
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ć:

Kopiuj
typedef long long unsigned int lluint;

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

  • Rejestracja: dni
  • Ostatnio: dni
0

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

CL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

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

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
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ę?
KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2520
0

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

CL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
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.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2520
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.
Xitami
  • Rejestracja: dni
  • Ostatnio: dni
0

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

CL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

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

byku_guzio
  • Rejestracja: dni
  • Ostatnio: dni
0

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

byku_guzio
  • Rejestracja: dni
  • Ostatnio: dni
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).

RE
  • Rejestracja: dni
  • Ostatnio: dni
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.
C0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 41
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.