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

dziwna wartość inta - wskazniki

42 Warsaw Coding Academy
0 głosów
143 wizyt
pytanie zadane 22 kwietnia 2020 w C i C++ przez TOWaD Mądrala (6,420 p.)

Czy ktoś by mógł pokrótce, dlaczego na wyjściu jest wartość 33619976 i jak to się oblicza;

Dlaczego jest zła to mniej więcej kojarzę.

jak się zabezpieczyć przed takimi kwiatkami, czy nie ma sposobu i taka jest uroda wskaźników

#include <iostream>

class Base {
  int* myDependency;
  int var2;
  double var3;
public:
  Base(int* dep) : myDependency(dep) {}
  void show(){
  std::cout<<*myDependency;
  }
};

class Derived : public Base {
public:
  Derived(int* dep) : Base(dep+1) {}
};

using namespace std;

int main()
{
    int a=5;
    for(int i=1;i<5;i++){a+=15;}
    string s ={1,2,3,4,5,6,7,8,9};
    Derived b(&a);
    b.show();
    return 0;
}

// wyjscie 33619976

.

1 odpowiedź

0 głosów
odpowiedź 22 kwietnia 2020 przez tangarr Mędrzec (155,180 p.)

Błąd znajduje się w konstruktorze klasy pochodnej.

Derived(int* dep) : Base(dep+1) {}

Zmienna dep jest wskaźnikiem, dlatego dep+1 zwraca "następny" wskaźnik int (Adres wskaźnika dep powiększony o sizeof(int)).

Aby lepiej to zobrazować stwórz dwuelementową tablicę int i przekaż do konstruktora adres pierwszego elementu

int main()
{
    int tab[] = {5, 666};
    Derived b(&tab[0]);
    b.show();
    return 0;
}

 

komentarz 22 kwietnia 2020 przez TOWaD Mądrala (6,420 p.)
To ok. Bardzej mi chodziło czy funkcje zabezpieczą prze taką sytuacją. Czy referencja jest jednak lepsza i czy referencję można dziedziczyć.
komentarz 22 kwietnia 2020 przez tangarr Mędrzec (155,180 p.)
Użycie referencji nie uchroni cię przed przekazaniem złego adresu.
Co tak naprawdę chcesz uzyskać w klasie Derived?
komentarz 22 kwietnia 2020 przez TOWaD Mądrala (6,420 p.)
bardziej chodzi by maina()/*lub główny plik programu*/ zamknąć, przed możliwością pisania i czytania po nim " w niestandardowy sposób".

Podobne pytania

0 głosów
1 odpowiedź 577 wizyt
pytanie zadane 2 lipca 2022 w C i C++ przez polandonion Dyskutant (7,630 p.)
0 głosów
1 odpowiedź 584 wizyt
pytanie zadane 26 czerwca 2022 w C i C++ przez polandonion Dyskutant (7,630 p.)
0 głosów
0 odpowiedzi 162 wizyt
pytanie zadane 27 września 2018 w C i C++ przez KaRoLiNakk Nowicjusz (160 p.)

93,383 zapytań

142,382 odpowiedzi

322,539 komentarzy

62,744 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...