Initalisiert new primitive Variablen?



  • Hi wenn ich folgendes schreibe:

    char* myString = new char[1024];

    Sind die Werte die einzelnen chars initalisiert (zum Beispiel alle 0, 'A', oder sonstwas) oder sind einfach das was vorher im Speicher stand?



  • Die Werte werden nicht initialisiert, sind also willkürlich.

    Sowas könnte man aber auch ausprobieren...



  • Wird C++0x da eigentlich endlich Vernünftig? Sodass man zB. auch nen Defaultinitwert angeben kann?

    Ist doch Frickelei sowas bis jetzt...



  • Ich find das nicht unvernünftigt sondern toll. Damit kann man nämlich zufällige Wert vom Heap holen. Für schwache Cryptografie reicht das locker aus^^



  • std::vector<char> vec = {'H', 'e', 'l', 'l', 'o', , ' ', 'W', 'o', 'r', 'l', 'd', '!' };
    

    So macht man das wohl in C++0x. EIgene dynamische Arrays allozieren macht man aber jetzt schon nciht mehr. Die std::Container gibt es ja schon länger.

    Gruß
    Don06



  • Erboster User schrieb:

    Wird C++0x da eigentlich endlich Vernünftig? Sodass man zB. auch nen Defaultinitwert angeben kann?

    Ist doch Frickelei sowas bis jetzt...

    Wenn Du Dir das selber schreibst (die Initialisierung) ist das womöglich fehlerträchtige Frickelei.
    😃



  • Wenn ich es ausprobiere sind alle \0, also kann ich es nicht ausprobieren, aber initialisiert folgendes nicht mit dem Defaultwert(also \0)?

    char* arr(new char[1024]());
    


  • Doch, aber in diesem Falle benutzt du die Standardkonstruktor-Syntax (Klammern) und somit werden skalare Typen und PODs null-initialisiert.



  • meine ich ja.



  • JustAnotherNoob schrieb:

    meine ich ja.

    Ich dachte, du hättest eine Frage gestellt? Denn das, was du gezeigt hast, stimmt nicht mit dem Beispiel des Threaderstellers überein.


  • Administrator

    Erboster User schrieb:

    Wird C++0x da eigentlich endlich Vernünftig? Sodass man zB. auch nen Defaultinitwert angeben kann?

    Ist doch Frickelei sowas bis jetzt...

    Genau, C Dinge sind immer Frickeleien. Wieso also nicht gleich C++ Dinge verwenden?

    std::vector<char> vec(1024, 'A');
    std::string str(1024, 'A');
    
    // Und allenfalls, wenn du unbedingt, dein char-Array behalten möchtest:
    std::fill_n(myString, 1024, 'A');
    

    @rohezal,
    Man kann eine 0 hinbekommen, wenn man den "Trick" von JustAnotherNoob verwendet. Vielleicht ein wenig schöner geschrieben:

    char* myString = new char[1024]();
    

    Aber auf ein 'A' oder sowas, kann man sie nicht setzen. Da muss man std::fill_n verwenden, oder am besten gleich die C++ Container.

    Grüssli



  • Langsam ich WILL zufällige Werte in meinem Byte Array haben. Die kommen als Seed für Cryptografie in Frage. Ich freu mich drüber dass das geht.

    Its a feature not a bug 😃



  • rohezal schrieb:

    Langsam ich WILL zufällige Werte in meinem Byte Array haben. Die kommen als Seed für Cryptografie in Frage.

    Ich hoffe nur, daß das nicht deine einzige Quelle von Zufallsbits ist...

    Und paß auf, daß nicht irgendwann jemand daher kommt und den Code entfernt, weil er ja "sinnlos" ist. Schöne Grüße auch an die Leute von Debian... 🙄



  • dooooomi schrieb:

    rohezal schrieb:

    Langsam ich WILL zufällige Werte in meinem Byte Array haben. Die kommen als Seed für Cryptografie in Frage.

    Ich hoffe nur, daß das nicht deine einzige Quelle von Zufallsbits ist...

    Und paß auf, daß nicht irgendwann jemand daher kommt und den Code entfernt, weil er ja "sinnlos" ist. Schöne Grüße auch an die Leute von Debian... 🙄

    mit windows wäre das nicht passiert.



  • jodasoda schrieb:

    mit windows wäre das nicht passiert.

    Stimmt, die lassen den sinnlosen Code drin 😉
    http://www.c-plusplus.net/win98_sources.htm



  • Microsoft packt lieber Vorzugsweise Zufalls Generatoren die vom NSA gewollt werden in Windows / Vista. So ein Zufall dass es den Verdacht gibt das es für den Elipse Generator Skeltett Schlüssel gibt...



  • Ähm glaub mir, es gibt bessere Möglichkeiten, zufällige Zahlen zu erzeugen. Die willkürlichen Bitmuster in uninitialisierten Variablen entsprechen nicht den Anforderungen an gute Zufallsgeneratoren wie Gleichverteilung und kleine Korrelation der Werte. Zudem kann es auch vorkommen, dass man dadurch gerade zuvor beschriebenen Speicher nutzt und dessen Werte liest.

    @ rohezal:
    Wenn du ernsthaft Zufallszahlen möchtest, dann schau dir mal Boost.Random an.



  • Ein Standard-Computer kann sicherlich keine Zufallszahlen erzeugen. Oder warum soll man bei GnuPG optimalerweise wie blöd die Maus auf dem Screen bewegen, wenn der Key erzeugt wird? Oder warum soll man bei PGP wie blöd wirre Buchstaben eintippen, wenn der Key erzeugt wird? Weil die Bewegungen und Tastendrücke des Benutzers zufälliger sind, als wenn die CPU was "auswürfeln" soll.

    Boost.Random und TR1 (da sind meines wissens die Boost.Random eingeflossen) sind auch keine echten Zufallszahlen, aber wahrscheinlich besser als den Speicher auslesen. 😉

    Ich bin mir sicher das es Kryptochips gibt, die einen "Würfel" in Hardware gegossen haben. 😃 😉



  • OT: geschieht überhaupt etwas zufällig? Alles hat doch seine Ursache, oder etwa nicht?;P Zufall ist immer nur für den Menschen nicht nachvollziehbar und das können Computer auch.



  • Bulli schrieb:

    Ein Standard-Computer kann sicherlich keine Zufallszahlen erzeugen.

    Sagte ich auch nirgends; nur führen die Zufallsalgorithmen sicher zu besserem Zufall als die willkürlichen Werte im Speicher.

    JustAnotherNoob schrieb:

    OT: geschieht überhaupt etwas zufällig? Alles hat doch seine Ursache, oder etwa nicht?;P

    Darüber wurde in der Philosophie häufig gestritten. Heute kommen zwar wissenschaftliche Erkenntnisse wie die Heisenbergsche Unschärferelation dazu, aber das reicht nicht allen. Zumal rein logisch gesehen alles eine Ursache haben müsste, wie du sagst. Nun ja, das führt uns natürlich weiter zur Frage, wie das erste Ereignis entstanden ist, womit wir wieder bei einer anderer, sehr umstrittenen philosophischen Frage wären... 😉

    JustAnotherNoob schrieb:

    Zufall ist immer nur für den Menschen nicht nachvollziehbar und das können Computer auch.

    Nein. Beim Computer kommt noch ein Aspekt dazu: Der Zufall ist berechen- und beliebig oft wiederholbar. Wenn man den Startwert und den Algorithmus kennt, kann man die gesamte Folge der Zufallszahlen rekonstruieren. Das hat man beim Würfeln nicht.


Anmelden zum Antworten