Wpis z mikrobloga

#cpp #jezykc

Próbuję rozwiązać dla języka C: https://www.codewars.com/kata/5340298112fa30e786000688/train/c
W testach randomowo dostaję "Test Crashed Caught unexpected signal: SIGSEGV (11). Invalid memory access."
Passed: 108 Failed: 2 Errors: 2 Exit Code: 1
Kod: https://pastebin.com/72F7E1fL

Wygląda na źle zaalkowaną pamięć lub przekroczenie jej zakresu. Uruchamianie na PC nie wyrzuca żadnych problemów, ale pewnie nie testuję jakiegoś konkretnego przypadku, w którym się to wysypuje. Co w powyższym kodzie może być przyczyną?
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@zwei:
Tak czy siak dzięki. Pamięć zaalokowana pod ret jest oczywiście zwalniania w funkcji wywołującej twos_difference.
Swoją drogą - korzystałeś z valgrind czy czegoś innego?
  • Odpowiedz
@TheCao: chociaż właśnie przetestowałem i jak z jest 0, to jak zamiast 0 sforce'uje jedynkę, to już nie wywala segfaulta, tylko że test nie przeszedł, więc to pewnie to
  • Odpowiedz
@zwei: Widziałem to już wcześniej i próbowałem. Z musi być wyzerowane, bo nie wiem co za śmieci dostaję z zewnątrz. Są jakieś bardziej eleganckie metody?
Segfaulty wyrzuca dopiero przy którymś kolejnym teście. Jeśli masz błąd już w pierwszym z nich to dalsze nie są przeprowadzane i dlatego nie pojawia się segfault ;)
  • Odpowiedz
Z musi być wyzerowane, bo nie wiem co za śmieci dostaję z zewnątrz. Są jakieś bardziej eleganckie metody?


No tak, ja zmieniam z na 1 na samym końcu przed returnem jeśli jest 0.

Jeśli masz błąd już w pierwszym z nich to dalsze nie są przeprowadzane i dlatego nie pojawia się segfault ;)


@TheCao: no to wykluczyłem wstawiając 1 tylko wtedy, gdy z wychodzi na końcu 0. Z tym że
  • Odpowiedz