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

question-closed błąd wykonania (SIGABRT) - Tablice spoj

Object Storage Arubacloud
0 głosów
771 wizyt
pytanie zadane 4 sierpnia 2017 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)
zamknięte 4 sierpnia 2017 przez Michał_Warmuz

Cześć. Robię zadanie z tablicami i ciąglę wyskakuje mi błąd (SIGABRT) . Z góry Dziękuje za Pomoc.

http://wklej.org/id/3229519/

komentarz zamknięcia: Już znam odpowiedź

2 odpowiedzi

+1 głos
odpowiedź 4 sierpnia 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)
wybrane 4 sierpnia 2017 przez Michał_Warmuz
 
Najlepsza

Tworzysz tablicę o rozmiarze 0 - tyle wynosi przy stworzeniu tablicy zmienna ile_miejsca.

komentarz 4 sierpnia 2017 przez Michał_Warmuz Mądrala (5,830 p.)
nie wiem zmieniłem kompilator i działa na gcc 4.3.2 wtf?!
komentarz 4 sierpnia 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)
Ten kod nie może działać bo rozmiar tablicy wynosi 0.
komentarz 4 sierpnia 2017 przez d0n Mądrala (6,440 p.)
Może działać, bo czasem przy odwołaniu do tablicy indeksem, który jest poza jej rozmiarem można pobrać pamięć "za" tablicą i z niej korzystać, co przy wyjątkowym farcie nie zamaże żadnego ważnego fragmentu, ale ogólnie taki kod jest bardzo nieprawidlowy, a jeżeli nie byłby tylko zadankiem na spoju, to byłby nawet niebezpieczny
komentarz 4 sierpnia 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)
To zależy co mamy na myśli mówiąc "działać". Wiem, że takie coś może mieć miejsce ale działać nie działa bo nie o to chodziło autorowi.
komentarz 4 sierpnia 2017 przez Michał_Warmuz Mądrala (5,830 p.)
Na testach działa i po zmianie kompilatora spoj zaakceptował xd
komentarz 4 sierpnia 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)

To nie ma znaczenia, w żadnym wypadku nie powinieneś się tym sugerować, bo korzystanie z tablicy o rozmiarze zero to undefined behaviour, czyli niezdefiniowane zachowanie. Calutki ten program jeździ po pamięci, po której nie powinien. Dzieje się tak dlatego, że w rzeczywistości system przydziela programowi całe strony pamięci a potem new/malloc zarządza tym jak je przydzieli - w wielu przypadkach do końca takiej strony pamięci będziesz miał jeszcze dużo miejsca (zwykle rozmiar strony to 4kB) i "nic" się nie stanie jak po tym zaczeniesz jeździć (poza zepsuciem innych danych, które tam są wrzucone). Spróbujesz zapisać jeden bajt dalej lub wcześniej i dostajesz crash. Nie możesz kontrolować tego jak daleko od końca strony zostanie umieszczona Twoja tablica i przez to zachowanie tego programu to undefined behaviour.

0 głosów
odpowiedź 4 sierpnia 2017 przez d0n Mądrala (6,440 p.)
Uzywasz ile_miejsca jako rozmiar tablicy, gdy jeszcze nie zostalo pobrane z wejscia i jest w nim 0.
SIGABRT pojawia się m. in. zwykle, gdy program odwołuje się do pamięci, której nie zaalokował, a tak właśnie się dzieje przez pustą tablicę.
1
komentarz 4 sierpnia 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)
Nie, SIGABRT dotyczy wywołania funkcji abort() ale nie do tego to służy. Podczas próby skorzystania z niepożądanego miejsca w pamięci dostaniesz SIGSEGV.
komentarz 4 sierpnia 2017 przez d0n Mądrala (6,440 p.)
Faktycznie pomylilem sie mocno

Podobne pytania

0 głosów
1 odpowiedź 1,665 wizyt
pytanie zadane 2 czerwca 2017 w C i C++ przez dokolyski Początkujący (290 p.)
+2 głosów
2 odpowiedzi 776 wizyt
0 głosów
2 odpowiedzi 429 wizyt
pytanie zadane 20 stycznia 2020 w SPOJ przez enpikku Nowicjusz (120 p.)

92,632 zapytań

141,500 odpowiedzi

319,878 komentarzy

62,011 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!

...