geht das noch



  • Ich habe gerade folgeneden Code im internet gefunden als besipiel warum Zeiger schlecht sein können. Ist dieser Code so noch gültig oder wurde der Fehler behoben?

    #include <string.h> 
    #include <iostream.h> 
    class Ganz_unsicher { 
    public: 
      Ganz_unsicher() { strcpy(passwort, "geheim"); } 
    private: 
      char passwort[100]; 
    }; 
    void main() 
    { 
      Ganz_unsicher gleich_passierts; 
      char *boesewicht = (char*)&gleich_passierts; 
      cout << "Passwort: " << boesewicht << endl; 
    }
    

    danke Jud4s



  • Der Code enthält keine Fehler, erzeugt aber undefiniertes Verhalten. Welcher Fehler sollte also von wem behoben sein?



  • das man boesewicht ausgeben kann obwohl private



  • Das müsste erlaubt sein (ist ja quasi ein POD, der Konstruktor dürfte nur formal einen Unterschied machen), hab den C++-Standard aber auch nicht mit Löffeln gefressen.
    Der Code enthält trotzdem fünf Fehler:

    #include <string.h>
    #include <iostream.h> 
    ...
    void main() 
    cout
    endl
    


  • judas schrieb:

    das man boesewicht ausgeben kann obwohl private

    Es geht immer. Vor casts gibt es keinen Schutz.



  • Wäre ja auch noch schöner, wenn mein eigener Quelltext Geheimnisse vor mir hätte...



  • nja in dieser ganzen Geschichte geht es darum, das in nem Java Tut gesagt wurde das Zeiger böse sind, da man mit deren Hilfe sich daten krallen kann, auf die man eigentlich keine Zugriffsrechte hat (Private).
    Ich wollte eigentlich wissen ob dieses Manko gelöst wurde oder ob das ein weiterhin bestehender Nachteil/Kritikpunkt von Cpp im Vergleich zu Java z.b. ist.



  • Jud4s schrieb:

    nja in dieser ganzen Geschichte geht es darum, das in nem Java Tut gesagt wurde das Zeiger böse sind, da man mit deren Hilfe sich daten krallen kann, auf die man eigentlich keine Zugriffsrechte hat (Private).
    Ich wollte eigentlich wissen ob dieses Manko gelöst wurde oder ob das ein weiterhin bestehender Nachteil/Kritikpunkt von Cpp im Vergleich zu Java z.b. ist.

    Das ist kein Manko und schon gar kein Kritikpunkt an C++, wie kommst du auf sowas?
    Ein Programm hat uneingeschränkten Zugriff auf seinen Adressraum, inklusive aller Variablen. private oder public spielt zur Laufzeit rein gar keine Rolle mehr. Du kannst eben keine Daten eines Programms vor sich selbst verstecken.

    Badestrand_ schrieb:

    Wäre ja auch noch schöner, wenn mein eigener Quelltext Geheimnisse vor mir hätte...

    Genau das.



  • Java Tut gesagt wurde das Zeiger böse sind, da man mit deren Hilfe sich daten krallen kann, auf die man eigentlich keine Zugriffsrechte hat (Private).

    Encapsulation prevents mistakes, not espionage.



  • Jud4s schrieb:

    nja in dieser ganzen Geschichte geht es darum, das in nem Java Tut gesagt wurde das Zeiger böse sind, da man mit deren Hilfe sich daten krallen kann, auf die man eigentlich keine Zugriffsrechte hat (Private).
    Ich wollte eigentlich wissen ob dieses Manko gelöst wurde oder ob das ein weiterhin bestehender Nachteil/Kritikpunkt von Cpp im Vergleich zu Java z.b. ist.

    Ja, in Java gibt des diese Möglichkeit nicht, weil Java keine Pointer hat. Aber in C++ ist das kein Manko sondern "by Design".


Anmelden zum Antworten