STL Debuging
-
Och ich entsinne mich daran, das Du in einem Beitrag in dem es um const char ging gleich etwas rund um strings gepostet hat.
Zudem hat der Satz "Du kannst diese ja gar nicht mehr wieder freigeben" auch gültigkeit wenn eine Exception fliegt.
Auch die Aussage "wo da ein prinzipbedingt Speicherleck entstehen sollte" passt die Antwort "Bei einer Exception" recht gut.
Man kann aber auch gleich mit
Ergo: Erst Lesen, dann Nachdenken, dann Posten.
P.S.: Und immer schön an Dieter Nuhr denken "Wer keine Ahnung hat: Einfach mal Fresse halten !"
um sich langen .
Du solltest unbedingt mal ruhiger treten beim Posten
:xmas2:
-
Simon2 schrieb:
Vellas schrieb:
...Du kannst diese ja gar nicht mehr wieder freigeben, d.h. du hast ein riesen Speicherleck. ...
Obwohl wenn ich ebenfalls in diesem Fall (und auch sonst öfter) zu Stackobjekten rate, sehe ich nicht, wo da ein prinzipbedingt Speicherleck entstehen sollte. Er braucht nur ein delete einzufügen:
... int main(void) { ... Test * t; for (int i=0;i<50;i++) { t = new Test(); wsprintf(buff,"NR%i",i); t->setInhalt(buff); V1.push_back(*t); delete t; // hier } ...Nichtsdestotrotz ist Dein Code besser.

Gruß,
Simon2.
Stimmt, dass geht natürlich schon. Aber an sowas verkrüppeltes wage ich gar nicht zu denken.

Greetz
-
Mr Evil schrieb:
und es MUSS und wird immer funktionieren
Das ist so falsch. VS2005 ist in dieser Hinsicht einfach buggy.
-
Guten Abend,
erstmal danke für eure hilfreichen Antworten! Ich habe mich beim 2. Post verschrieben. Die ausgabe geht jedoch nicht das besagte Debugging. Memory Fenster ist ein toller Tipp, den ich auch schon öfters angewendet habe (0x00400000 liegt die main und durchsteppen ist auch möglich ...) jedoch scheint mir das für eine Laufvariable wie beispielsweise einem iterator sehr ungeschickt und unproffesionell. Ist das sicher keine Einstellungssache oder wird man hier zum ddd gezwungen???
zusätzliche Frage zum heap und stack object:
nach dem Verlassen einer geschweiften Klammer ist doch Der Stack an der stelle wieder abgeräumt. Sogesehen wäre das doch die beste lösung oder ?
-
nach dem Verlassen einer geschweiften Klammer ist doch Der Stack an der stelle wieder abgeräumt. Sogesehen wäre das doch die beste lösung oder ?
Ja, so hab ich es doch gemacht. In der Schleife habe ich eine lokales Objekt t angelegt und dann dem Vector hinzugefügt. Anschließend wird t automatisch destruiert und mit jedem Schleifendurchgang wird eine neue Variable t angelegt und am Ende zerstört. Wenn du es aber mit new machst, musst du es auch mit einem delete wie Simon2 es gemacht hat zerstören.
Greetz
-
Ohne darauf herumreiten zu wollen, bei dem new-delete-Konstrukt muß entweder ein try-catch-Block drum herum gelegt oder (und das ist die bei weitem bessere Lösung) ein Smartpointer verwendet werden (zum Beispiel den bereits genannten aus Boost, std::auto_ptr würde es in diesem Fall aber auch tun).
Ohne diese Konstrukte ist der Code nicht Exception-sicher. Das Argument, daß man jemanden, der gerade erst anfängt sich mit C++ zu beschäftigen (oder zumindest noch nicht viel Erfahrung damit hat), nicht mit Exceptions erschlagen sollte, kann ich nachvollziehen. Aber trotzdem bin ich der Meinung, daß man auch einer solchen Person keinen fehlerhaften Code vorsetzen sollte. Exception-Sicherheit ist keine zusätzliche Qualitätseigenschaft guten Codes. Sie ist elementar und ein Code der nicht Exception-sicher ist, ist fehlerhaft und somit im Allgeminen unbrauchbar.
-
Knuddlbaer schrieb:
...
Du solltest unbedingt mal ruhiger treten beim Posten
:xmas2:Das stimmt wohl - aber bei mir macht auch der Ton die Musik.
Wenn mich jemand anpampt, hat er gute Chancen, eine Replik im selben Tonfall zu bekommen.
Wenn ich mit bei einem gemäßigtem Tonfall angesprochen werde, antworte ich meistens auch ruhiger.
Eine große Hilfe dabei ist aber auch, wenn man Leute schon aus anderen Posts/Threads kennt, dann kann man ihre Denkweise besser einschätzen - Du bist mir z.B. permanent positiv aufgefallen (sorry, dass das jetzt gönnerhaft klingt; ist nicht so gemeint - finde gerade keine besseren Worte), so dass ich Kritik von Dir immer ernst nehmen würde. Und genau da sehe ich das Problem mit der "Unregistriertenpest" (
), die hier ausgebrochen ist: Teilweise verhalten die sich hier wie die Sau im Dorfe, teilweise entsteht zumindestens der Eindruck, sie täten es und man hat keine Chance, das einzuordnen... 
Wenn sie dann noch mit markiegen Nicknames hier auftauchen, drängt sich eher ein Eindruck auf, es ginge hier mehr um "trouble-making" als um "trouble-shooting"
Knuddlbaer schrieb:
Och ich entsinne mich daran, das Du in einem Beitrag in dem es um const char ging gleich etwas rund um strings gepostet hat.
...Ich schätze, das bezog sich auf meine Anmerkung zum Thema "exception-safety für Anfänger"
.... das meinte ich, wie ich es schrieb: Wer das machen möchte, darf das gerne tun, aber er
- braucht nicht MICH damit (in diesem Thread) aufzuklären,
- sollte sich didaktisch mehr aus dem Kreuz leiern als ein "Das ist absoluter Schwachsinn, nur mit deinem delete wird der Programmcode auch nicht exception-safe. Da muss wenn dann ein scoped_ptr her!" und
- sollte vielleicht einen "einladenderen Schreibstil" wählen.
-> So wie Z2 es z.B. gemacht hat.
Gruß,
Simon2.
-
Vellas schrieb:
...
Stimmt, dass geht natürlich schon. Aber an sowas verkrüppeltes wage ich gar nicht zu denken.
Greetz
Man sollte das auch ganz schnell wieder ergessen - auch, wenn es "geht"

Dein Ansatz mit dem Stackobjekt ist definitiv "der Richtige".Gruß,
Simon2.
-
Ich schätze, das bezog sich auf meine Anmerkung zum Thema "exception-safety für Anfänger" .... das meinte ich, wie ich es schrieb: Wer das machen möchte, darf das gerne tun, aber er
- braucht nicht MICH damit (in diesem Thread) aufzuklären,
- sollte sich didaktisch mehr aus dem Kreuz leiern als ein "Das ist absoluter Schwachsinn, nur mit deinem delete wird der Programmcode auch nicht exception-safe. Da muss wenn dann ein scoped_ptr her!" und
- sollte vielleicht einen "einladenderen Schreibstil" wählen.
-> So wie Z2 es z.B. gemacht hat.Tiiiiieeeeef einatmen, wieder ausatmen, bis 10 Zählen

Nimm es doch einfach als bitte mit gutem Vorbild vorann zu gehen und jedem mal eine Ausgleisung der Formulierung zu gestatten

Antworte mit wissen, nicht mit Dieter Nuhr , das schaut sonst aus als würdest Du Nuhr rumnörgeln

Also gib jetzt ruhe, wir können das gerne wo anderst weiter besprechen (von mir aus auch per mail) aber hier ist es jetzt völlig offtopic, sollte nur die bitte sein ein Vorbild zu sein , Fehler machen wir alle. Wir tollerieren doch auch MS

-
Ah, bin ich jetzt der bad guy hier ? 
Was gibt's denn jetzt an meinem Abschnitt auszusetzen ?Ich schätze, das bezog sich auf meine Anmerkung zum Thema "exception-safety für Anfänger"
.... das meinte ich, wie ich es schrieb: Wer das machen möchte, darf das gerne tun, aber er
- braucht nicht MICH damit (in diesem Thread) aufzuklären,
- sollte sich didaktisch mehr aus dem Kreuz leiern als ein "Das ist absoluter Schwachsinn, nur mit deinem delete wird der Programmcode auch nicht exception-safe. Da muss wenn dann ein scoped_ptr her!" und
- sollte vielleicht einen "einladenderen Schreibstil" wählen.
-> So wie Z2 es z.B. gemacht hat.
Ich weiß nicht, wie Du den gelesen hast, aber er war absolut sachlich (sowohl vom Ton her als auch inhaltlich) - so wie dieses Post, das Du hier liest. Es mag sein, dass meine Ausdrucksweise in Deinen Ohren aggressiv klingt; dann tut es mir wirklich leid (ernst gemeint !) ... es ist nicht aggressiv gemeint.
Lies Dir mal die anderen Posts vom "Vollstrecker" durch; vllt. kommst Du auch zu dem Schluß, dass meine "Kritik" nicht den falschen getroffen hat - übrigens hat er selbst sich überhaupt nicht beschwert über meinen Kommentar.
Von mir aus können wir diese Subdiskussion hier auch beenden.
Gruß,
Simon2.