Fragen und Neuigkeiten zu C / C++, C#, Java, (X)HTML, PHP, SQL, Perl und weiß Gott was noch alles!
Forumsmitglieder sind herzlich eingeladen hier ihre Arbeiten und Projekte zu präsentieren
(Die Ausgabe wird auf anderen Systemen und mit anderen Compilern wahrscheinlich anders aussehen, mit sehr viel Glück funktioniert das Programm vielleicht sogar)
Also, ein teil des problems hab ich glaub ich schon erkannt.
[spoiler]
Und zwar liegt das Problem daran, das ein echter copy-konstruktor fehlt.
Bei void tu_nix wird also der default copy-konstruktor verwendet, der alle werte 1:1 kopiert, nennen wir den kopierten pointer des strings ma str2.
So, wenn jetzt void tu_nix beendet wird, wird für das Objekt blubb der Destruktor aufgerufen, was soviel heißt wie delete [] str2;
da aber *str=*str2 ist (default copy konstruktor) wird der inhalt von *str gelöscht.
Wie es dann aber zur ausgabe am Bildschirm kommt weiß ich auch net :/
[/spoiler]
Manchmal kann man eine tödliche Bombe einfach nicht loswerden.
[spoiler]bin auch soweit gekommen das in tu_nix das kopierte objekt wieder gelöscht wird , und das offensichtlich auf den selben speicher zeigt wie das original (wie das mit default cpy ctors zu tun hat hatte ich allerdings keine ahnung...)
und zur ausgabe am bildschirm:
da nun auf irgendeinen gelöschten bereich gezeigt wird kann da drin stehn was will... bis halt irgendwann n \0 kommt[/spoiler]
Das sollte net korrektes c++ sein sondern nur für "der Bereich auf den str is derselbe wie der, auf den str2 zeigt" die kurzform sein Ich weiß, bin schreibfaul
[edit]
Aber ein sehr schönes Beispiel dafür, dass das, was in so manchen tutorials immer steht, und zwar dass man den copykonstruktor immer dann schreiben muss, wenn man auch den normalen konstruktor und destruktor schreibt wirklich wichtig ist
[nochn edit]
Das Rätsel is aber genial, hat spaß gemacht zu knobeln
Manchmal kann man eine tödliche Bombe einfach nicht loswerden.
Ich glaub ich weiß was das char c[] blabla soll
Und zwar wird der speicherplatz mit delete [] freigegeben, aber der speicher nicht überschrieben, d.h. das alte "Hallo" ist noch gespeichert.
Wenn er jetzt das neue array speichert wird normalerweise derselbe speicher wie zuvor (da jetzt freigegeben) zugewiesen, und das stellt sicher, das in den speicherbereich auf den str zeigt nix sinnvolles mehr stehen kann.
Würd ich jetzt mal vermuten
Manchmal kann man eine tödliche Bombe einfach nicht loswerden.
char cc[] wird allerdings auf dem stack alloziert..
vielleicht macht er bei manchen compilern lustige dinge aber bei allen die ich bisher gesehen hab wars völlig unerheblich ob er da war.
Das Forum braucht Cookies damit du dich nicht jedes mal neu einloggen musst. Außerdem posten manche Nutzer gerne Bilder und Videos, die dann u. U. auch Cookies setzen vom Video-Anbieter (YouTube, gibt ja sonst nix). Daher muss der Banner sein. Jederzeit in den Einstellungen umstellbar. Read our Datenschutzerklärung here.
Privacy settings
Das Forum braucht Cookies damit du dich nicht jedes mal neu einloggen musst. Außerdem posten manche Nutzer gerne Bilder und Videos, die dann u. U. auch Cookies setzen vom Video-Anbieter (YouTube, gibt ja sonst nix). Daher muss der Banner sein.