wypok_smieszne_obrazki
Mirki z #programowanie #android #jezykc #cpp dlaczego nie zwrócenie wartości w funkcji powoduje, że procesor wyrzuca illegal instruction? Architektura #arm Co się takiego dzieje, bo wygląda jakby program counter miał wtedy nieprawidłową wartość i program "poszedł w krzaki". #pytaniedoeksperta
  • Najlepsze
  • Wszystkie komentarze
Kaczus2B
Kaczus2B
@wypok_smieszne_obrazki: zadeklarowales, ze cos zwrocisz a nic nie zwracasz, wiec jest do moim zdaniem UB, a jesli tak, to standard mowi, ze moze stac sie w zasadzie cokolwiek.
Jak nie chcesz nic zwracac to uzyj void
Saly
Saly
1
@wypok_smieszne_obrazki: UB dla kompilatora to jak licencja na zabijanie: nie ma sensu zastanawiać dlaczego tak sie stało. Jedyne co ci zostaje to podglądnięcie wygenerowanego asemblera
wypok_smieszne_obrazki
Jak nie chcesz nic zwracac to uzyj void


@Kaczus2B: no to raczej oczywiste :D Chciałem zrozumieć czemu na tej architekturze jest taki tego efekt. Można jakoś podejrzeć assembler z tego co mi tu wygenerował? Na prockach intela tego nie widziałem, w sumie z ciekawości sprawdziłem i sam arm nie miał takiego efektu na rdzeniu cortex-m4F. Wydawało mi się, że funkcja wartość zostawia w rejestrze i nie bardzo wiem dlaczego nie
Kaczus2B
Kaczus2B
@wypok_smieszne_obrazki: to raczej zwiazane jest z kompilatorem, ktory moze optymalizowac kod w odpowiedni sposob. Jakis czas temu na grupach byl analizowany przypadek z przepelnieniem wartosci na incie. Gdy dalo sie unsigned int, program dzialal przewidywalnie, jak dalo sie int, a wiec teoretycznie przekroczenie to UB, to kompilator wygenerowal kod, ktory nie dzialal zgodnie z zalozeniami.
gentooman
gentooman
@wypok_smieszne_obrazki: Pokaż lepiej część z Javy. JNI jest dość delikatne i łatwo o dziwne crashe. Przez ponad rok utrzymywałem bindingi JNI na Androidzie i dużo widziałem ( ͡° ͜ʖ ͡°)