Probleme mit malloc / free (DAMAGE: after Normal block (#142) at 0x00B65A20.)



  • Das stimmt natürlich, bei dem nackten C-Code isst es aber etwas weniger Overhead. Ist aber aucch egal, denn es funktioniert ja nun und sieht auch mehr nach C++ aus. 🙂

    Trotzdem werden wir uns hier langfristig mal einen anderen Compiler zulegen müssen - vor allem wenn es die Mitarbeiter weniger Nerven kostet.



  • lunatic82 schrieb:

    Das stimmt natürlich, bei dem nackten C-Code isst es aber etwas weniger Overhead.

    Was zu beweisen wäre. Dafür müsstet du ja erst einmal funktionierenden Code geschrieben haben, um das überhaupt messen zu können. Kaputten Code mit Funktionierendem zu vergleichen ist nicht sinnvoll.

    Wenn du mal den "Overhead" misst, den du durch dein Gefrickel erzeugt hast - also die Zeit die unnötigerweise dafür drauf ging, den ursprünglichen Code zu debuggen - dürfte es deinen Arbeitgeber teurer gekommen sein, dich für diese verplemperte Zeit zu bezahlen, als wenn du es gleich RichtigTM gemacht hättest.



  • Registrierter Troll schrieb:

    Wenn du mal den "Overhead" misst, den du durch dein Gefrickel erzeugt hast - also die Zeit die unnötigerweise dafür drauf ging, den ursprünglichen Code zu debuggen - dürfte es deinen Arbeitgeber teurer gekommen sein, dich für diese verplemperte Zeit zu bezahlen, als wenn du es gleich RichtigTM gemacht hättest.

    Wenn er gut ist, kann er es so argumentieren dass vor allem der bescheuerte VC6 dran schuld ist. Dann wäre es für n guten Zweck verplempert 😉



  • Registrierter Troll schrieb:

    Wenn du mal den "Overhead" misst, den du durch dein Gefrickel erzeugt hast - also die Zeit die unnötigerweise dafür drauf ging, den ursprünglichen Code zu debuggen - dürfte es deinen Arbeitgeber teurer gekommen sein, dich für diese verplemperte Zeit zu bezahlen, als wenn du es gleich RichtigTM gemacht hättest.

    War ganz einfach zu beweisen, indem man den Code komplett unter g++ erstellt bzw. den Intel Compiler nutzt...

    Und vertane Arbeitszeit war das auch nicht. Wir mussten uns so mal mit den unterschiedlichen Speicherverwaltungen im Debug- und Release-Mode auseinander setzen, haben gelernt das der VC6.0-Compiler für den Arsch ist und werden nun auf Eclipse, CDT, Intel-Compiler umstellen.

    Fehlt nur noch ein gescheiter Debugger. Schön wäre so etwas wie das in XCode integrierte Frontendd für den gdb. Das ist echt praktiscch, hab ich aber für die Windows-Plattform noch nicht gefunden.

    Übrigens, gibt es keinen richtigen Weg. Die Methode, die ich gepostet habe, funktioniert schon seit Ewigkeiten auf meinem Mac und ist extra portabel gehalten.

    Dein std::string und std::vector bekommst Du ja niemals auf einem Embedded-System an den Start. Die meisten Compiler für diese Systeme kennen nämlich keine Strings.



  • lunatic82 schrieb:

    Übrigens, gibt es keinen richtigen Weg.

    In C++ mit malloc und free zu hantieren ist aber garantiert der FalscheTM.

    Die Methode, die ich gepostet habe, funktioniert schon seit Ewigkeiten auf meinem Mac und ist extra portabel gehalten.

    Uh, sorry, aber...

    arr = (char**)malloc(sg * sizeof(char*));
        [...]
      for(i=0; i <= sg; i++) {
        arr[i] = NULL;
        [...]
      }
    

    Dieser Code ist einfach nur kaputt und wenn der jemals irgendwo funktionierte, dann war das pures Glück. Und das ist nicht die Schuld des Compilers, auch wenn du das gerne so hättest.

    Dein std::string und std::vector bekommst Du ja niemals auf einem Embedded-System an den Start.

    Nochmal sorry, aber WTF? Warum wurde dann überhaupt C++ gewählt, wenn die Plattform noch nicht einmal das Minimum hergibt?



  • lunatic82 schrieb:

    Wir mussten uns so mal mit den unterschiedlichen Speicherverwaltungen im Debug- und Release-Mode auseinander setzen, haben gelernt das der VC6.0-Compiler für den ***** ist und werden nun auf Eclipse, CDT, Intel-Compiler umstellen.

    Durchaus positiver Effekt 😉 \o/



  • Registrierter Troll schrieb:

    Dieser Code ist einfach nur kaputt und wenn der jemals irgendwo funktionierte, dann war das pures Glück. Und das ist nicht die Schuld des Compilers, auch wenn du das gerne so hättest.
    [...]
    Nochmal sorry, aber WTF? Warum wurde dann überhaupt C++ gewählt, wenn die Plattform noch nicht einmal das Minimum hergibt?

    Ja der Code ist kaputt, aber es kommt drauf an, was der Compiler damit macht. Sind die Optimierungen aus, dann funktioniert es problemlos...

    Du kennst den Rest der Software nicht, der in C++ geschrieben ist. Warum sollte ich eine Funktion, die bereitss existiert noch einmal neu schreiben... Da ist nur die Klassendefinition drum gepackt worden.



  • lunatic82 schrieb:

    Ja der Code ist kaputt, aber es kommt drauf an, was der Compiler damit macht. Sind die Optimierungen aus, dann funktioniert es problemlos...

    Das kannst du nicht ernst meinen?

    Du kennst den Rest der Software nicht, der in C++ geschrieben ist.

    Wenn ich dich richtig verstehe, war die Software vorher in C geschrieben, ja? Und die Plattform unterstützt C++ bestenfalls sehr rudimentär, richtig? UND Visual C++ 6.0 unterstützt diese Plattform? Und der Intel-Compiler ebenfalls?

    Dann wäre es interessant zu wissen, welche Plattform das sein soll. Und (nochmal), warum zum Geier die Software nun in C++ geschrieben wird, wenn die Plattform das überhaupt nicht hergibt?

    Warum sollte ich eine Funktion, die bereitss existiert noch einmal neu schreiben...

    Da fällt mir ein verdammt guter Grund ein: weil die existierende Funktion kaputt ist.

    Da ist nur die Klassendefinition drum gepackt worden.

    Ja, ich seh schon. Hoffentlich muss ich niemals bei euch arbeiten. 🙂



  • lunatic82 schrieb:

    Übrigens, gibt es keinen richtigen Weg. Die Methode, die ich gepostet habe, funktioniert schon seit Ewigkeiten auf meinem Mac und ist extra portabel gehalten.

    Da in der Methode ein grober Fehler war, kann ich mir das kaum vorstellen. Wenn es tatsächlich doch ging, dann war das pures Glück.



  • Registrierter Troll schrieb:

    lunatic82 schrieb:

    Ja der Code ist kaputt, aber es kommt drauf an, was der Compiler damit macht. Sind die Optimierungen aus, dann funktioniert es problemlos...

    Das kannst du nicht ernst meinen?

    Doch kann ich. Ich seh schon, Du kennst dich gut mit optimierenden und korrigierenden Compilern aus und weisst auch wie unterschiedlich Speicher reserviert wird. Der VC6 kann das alles nicht, dass ist mir nun auch klar. Im übrigen gibt der Intel-Compiler für den geposteten Code in der Tat eine Bounding-Warnung aus, weil der inzwischen (wie man es von Smalltalk und Java kennt) eine saubere Quellcode-Analyse durchführt.

    Registrierter Troll schrieb:

    Wenn ich dich richtig verstehe, war die Software vorher in C geschrieben, ja? Und die Plattform unterstützt C++ bestenfalls sehr rudimentär, richtig? UND Visual C++ 6.0 unterstützt diese Plattform? Und der Intel-Compiler ebenfalls?

    Dann wäre es interessant zu wissen, welche Plattform das sein soll. Und (nochmal), warum zum Geier die Software nun in C++ geschrieben wird, wenn die Plattform das überhaupt nicht hergibt?

    Du kannst nicht richtig lesen. Die Funktion/Methode die ich geschrieben habe, kann auch auf Embedded-Systemen genutzt werden. Nur um die geht es hier. Die wurde wiederum nun in eine Software integriert die in C++ geschrieben ist. Normalerweise sollte so ein Codemisch kompatibler Sprachen möglich sein und ist er ja auch...

    Registrierter Troll schrieb:

    lunatic82 schrieb:

    Da ist nur die Klassendefinition drum gepackt worden.

    Ja, ich seh schon. Hoffentlich muss ich niemals bei euch arbeiten. 🙂

    Stimmt besser ist das, wenn Du das Rad immer neu erfinden würdest. Für mich ist das Thema nun an dieser Stelle erledigt, weil nun alles zufriedenstellend läuft. Im übrigen machen deine bevorzugten Strings und Vektoren nix anderes als die Quelltextpassage und das sogar noch viel häufiger, wenn man sich das mal im Debugger ansieht. Es macht die Arbeit nur für die ganz Faulen einfacher. 🙂



  • Tachyon schrieb:

    lunatic82 schrieb:

    Übrigens, gibt es keinen richtigen Weg. Die Methode, die ich gepostet habe, funktioniert schon seit Ewigkeiten auf meinem Mac und ist extra portabel gehalten.

    Da in der Methode ein grober Fehler war, kann ich mir das kaum vorstellen. Wenn es tatsächlich doch ging, dann war das pures Glück.

    Der sich, wie ich nun gesehen habe, erst bei der Anpassung auf der Arbeit eingeschlichen hat. Zu Hause gibt es keinen Vergleich i <= sg sondern nur i < sg. So kann das eben gehen, wenn man zu sehr rumfummelt, um den Fehler zu finden...



  • lunatic82 schrieb:

    Doch kann ich.

    👍

    Der VC6 kann das alles nicht, dass ist mir nun auch klar.

    Das ist haarsträubender Unsinn. Und ganz schlechter Stil, den Compiler für die eigene Unfähigkeit verantwortlich zu machen.

    Du kannst nicht richtig lesen.

    Entweder das, oder du kannst dich nicht richtig ausdrücken. Oder, was wahrscheinlicher ist, du weißt einfach nicht so recht wie du aus der peinlichen Nummer wieder rauskommen sollst, ohne zugeben zu müssen, dass du eigentlich keine Ahnung hast. Und setzt deshalb auf eine Verwirrungstaktik - eine Variation der berühmten Chewbacca-Verteidigung.

    Registrierter Troll schrieb:

    Ja, ich seh schon. Hoffentlich muss ich niemals bei euch arbeiten. 🙂

    Stimmt besser ist das, wenn Du das Rad immer neu erfinden würdest.

    😃 Hoffentlich bleibt dir die Ironie in dieser Aussage nicht auf ewig verborgen.



  • Registrierter Troll schrieb:

    lunatic82 schrieb:

    Du kannst nicht richtig lesen.

    Entweder das, oder du kannst dich nicht richtig ausdrücken. Oder, was wahrscheinlicher ist, du weißt einfach nicht so recht wie du aus der peinlichen Nummer wieder rauskommen sollst, ohne zugeben zu müssen, dass du eigentlich keine Ahnung hast. Und setzt deshalb auf eine Verwirrungstaktik - eine Variation der berühmten Chewbacca-Verteidigung.

    Doch kann ich, aber Du scheinst zu überlesen haben, dass er nicht mal bis zu der for-Schleife gekommen ist, sondern beim ersten allokieren des Speichers einen beschädigten Heap gemeldet hat, wenn die Software Schritt-für-Schritt debuggt worden ist.

    Deswegen ist mir mein Fehler auch gar nicht peinlich, denn das Programm ist ja an einer ganz anderen Stelle gestorben.

    Außerdem gab es ja auch mal wirklich hilfreiche Hinweise in diesem Forum von Leuten, die das Problem verstanden haben und nicht nur irgendwelche Phrasen gepostet haben. 😉

    Und denen bin ich auch ganz dankbar, denn manchmal ist man echt betriebsblind.

    Deine Leistung bestand dagegen dann doch eher aus Postings auf Heise-Niveau, war aber auch ganz amüsant. :p



  • lunatic82 schrieb:

    Registrierter Troll schrieb:

    lunatic82 schrieb:

    ...

    ...

    ...

    Is ja gut. Ihr mögt euch nicht, das hat jetzt jeder mitbekommen. Kommt halt vor. Eure persönlichen Differenzen haben aber nicht mehr viel mit dem Thema zu tun, daher führt euren kleinen Grabenkrieg bitte per Mail fortFachlich dürfte das Thema ja jetzt weitgehend geklärt sein oder?


Anmelden zum Antworten