Wpis z mikrobloga

Siemano mirasy. Powiedzcie mi jak to jest ze stosem w #java? Inicjalizuję zmienną nie definiując jej żadnej wartości. Następnie chcę wyświetlić jej wartość. Oczywiście wypada error, jednak czemu nie może ta zmienna przyjąć po prostu wartości ze stosu spod tego adresu tak jak ma to miejsce w #cpp? Domyślam się, że ma to związek z maszyną wirtualną w której jest uruchamiany kod java, czyli wartości na starcie są zawsze zerowane?
#java #naukaprogramowania #programowanie
  • 5
Inicjalizuję zmienną nie definiując jej żadnej wartości


@TMBRK: Jakbyś inicjalizował to byś przypisał wartość :P Dlaczego zakładasz, że w Javie ma to tak działać ? Ten język powstał, żeby takich rzeczy właśnie nie było.
Inicjalizuję zmienną nie definiując jej żadnej wartości.


@TMBRK: Haha, definiujesz zmienną nie inicjalizując jej żadną wartością brzmiałoby odrobinę poprawniej.

Dla zmiennych lokalnych przed pierwszym użyciem trzeba przypisać wartość. Wymóg ten pozwala na wyeliminowanie błędów użycia niezainicjalizowanej zmiennej.

Pola są inicjalizowane domyślnymi wartościami.
czemu nie może ta zmienna przyjąć po prostu wartości ze stosu spod tego adresu tak jak ma to miejsce w #cpp


@TMBRK: Na szczęście języki już z takich prymitywnych rozwiązań wyrosły.
Niezainicjalizowane zmienne są jedną z wielu przyczyn luk bezpieczeństwa, parę przykładów z brzegu:
https://www.cvedetails.com/cve/CVE-2017-9670/
https://www.cvedetails.com/cve/CVE-2017-1000494/
https://blogs.technet.microsoft.com/srd/2008/03/11/ms08-014-the-case-of-the-uninitialized-stack-variable-vulnerability/
https://bugs.chromium.org/p/project-zero/issues/detail?id=1789