Dynamische Speicherverwaltung



  • Danke erst mal für die Antworten.

    Es scheint am Debug-Mode zu liegen. Der Speicheranstieg ist im Release nicht zu verzeichnen.



  • Hört doch endlich mal auf malloc() zu casten.



  • TactX schrieb:

    Hört doch endlich mal auf malloc() zu casten.

    Manche Compiler liefern immer noch eine Warnung, wenn man das nicht macht (trotz C Standard).



  • Power Off schrieb:

    TactX schrieb:

    Hört doch endlich mal auf malloc() zu casten.

    Manche Compiler liefern immer noch eine Warnung, wenn man das nicht macht (trotz C Standard).

    Wenn sie da eine Warnung rausgeben halten sie sich ja eben nicht an den Standard, also komm mir nicht mit "trotz C Standard". Und wenn du dich so gerne über uralte, schrottige Compiler unterhältst, dann mach das doch in Zukunft bitte im Compilerforum. Danke.

    Ach und btw. Lieber eine Warnung zuviel als eine zuwenig.

    Edit: Oder vergisst du etwa immer die stdlib.h mit einzubinden? :p



  • TactX schrieb:

    Wenn sie da eine Warnung rausgeben halten sie sich ja eben nicht an den Standard, also komm mir nicht mit "trotz C Standard". Und wenn du dich so gerne über uralte, schrottige Compiler unterhältst, dann mach das doch in Zukunft bitte im Compilerforum. Danke.

    Ach und btw. Lieber eine Warnung zuviel als eine zuwenig.

    Edit: Oder vergisst du etwa immer die stdlib.h mit einzubinden? :p

    Setz doch mal den Warning-Level bei Deinem Compiler rauf und guck mal, ob er dann immer noch standardkonform ist. (Hab grad meinen getestet, GCC 3.3.5, und, hurra, er bringt keine Warnung, auch bei -Wall nicht)

    Im echten Leben (also bei Firmen) muss man ja auch oft mit alten Compilern arbeiten. Also den Kommentar kannst Du Dir sparen.



  • Ich will micht jetzt natürlich nicht darüber streiten was man im echten Leben teilweise fabriziert. Das ist eindeutig deine Domäne...

    <winkmitdemzaunpfahl>

    Das hat mit ANSI C aber nichts zu tun. Da ist das Verhalten klar definiert. Das ist also Power Off-topic.

    </winkmitdemzaunpfahl>



  • TactX schrieb:

    Ich will micht jetzt natürlich nicht darüber streiten was man im echten Leben teilweise fabriziert. Das ist eindeutig deine Domäne...

    <winkmitdemzaunpfahl>

    Das hat mit ANSI C aber nichts zu tun. Da ist das Verhalten klar definiert. Das ist also Power Off-topic.

    </winkmitdemzaunpfahl>

    Ich kann Dir bloss wuenschen, auch mal mit uralten, fehlerhaften Compilern arbeiten zu muessen, und Dir dann anhoeren zu muessen "das kann nicht der Compiler sein! Compiler haben keine Fehler!" usw. 👎 👎 👎

    Und es gibt uebrigens mehrere verschiedene ANSI C Standards. C89, C90 und C99!



  • Power Off schrieb:

    Ich kann Dir bloss wuenschen, auch mal mit uralten, fehlerhaften Compilern arbeiten zu muessen, und Dir dann anhoeren zu muessen "das kann nicht der Compiler sein! Compiler haben keine Fehler!" usw. 👎 👎 👎

    Mir ist schon bewusst, dass Compiler fehlerhaft sein können. Aber das bespricht man dann, wie bereits erwähnt, im Compilerforum. 👍 👍 👍



  • Benennt doch das Forum in "ANSI C 99 Forum" um, dann weiss jeder, was gemeint ist.



  • Power Off schrieb:

    Benennt doch das Forum in "ANSI C 99 Forum" um, dann weiss jeder, was gemeint ist.

    Ich lasse mich gerne (durch exakte Quellenangaben) korrigieren, aber der antike Rückgabetyp char* von malloc() wurde mit dem ANSI Standard durch void* ersetzt, und somit auch das Casten unsinnig gemacht. Und genau darum ging's hier.



  • TactX schrieb:

    Ich lasse mich gerne (durch exakte Quellenangaben) korrigieren, aber der antike Rückgabetyp char* von malloc() wurde mit dem ANSI Standard durch void* ersetzt, und somit auch das Casten unsinnig gemacht. Und genau darum ging's hier.

    Das ist nicht richtig. In den ANSI C Standards von 1989/1990 wurde das Casten bei void* ausdruecklich vorgeschrieben!



  • Power Off schrieb:

    TactX schrieb:

    Ich lasse mich gerne (durch exakte Quellenangaben) korrigieren, aber der antike Rückgabetyp char* von malloc() wurde mit dem ANSI Standard durch void* ersetzt, und somit auch das Casten unsinnig gemacht. Und genau darum ging's hier.

    Das ist nicht richtig. In den ANSI C Standards von 1989/1990 wurde das Casten bei void* ausdruecklich vorgeschrieben!

    Eine etwas vertrauenswürdigere Seite sagt aber was anderes.



  • TactX schrieb:

    Eine etwas vertrauenswürdigere Seite sagt aber was anderes.

    Ich hab grad den K&R von 1988 zur Hand genommen (als der C89 Standard fertig war), und die schreiben auch davon, dass es egal ist, "void*" und andere Pointertypen zuzuweisen oder zu vergleichen. Weiss auch nicht, wieso ich der Meinung bin, dass der Standard das vorschrieb. Leider hab ich die alten Normen jetzt nicht zur Hand. Jedenfalls haben so gut wie alle C Compiler bis vor einigen wenigen Jahren eine Warnung oder gar einen Fehler (incompatible pointer type) ausgegeben, wenn man das probiert hat, auch wenn's standardwidrig war.



  • so gut wie alle C Compiler bis vor einigen wenigen Jahren eine Warnung oder gar einen Fehler (incompatible pointer type) ausgegeben, wenn man das probiert hat, auch wenn's standardwidrig war.

    Genau das ist das Problem, selbst wenn man standardkonform programmieren wollte, konnte man es nicht, da der Compiler einen Error oder ne Warning ausspuckte. Ich persönlich caste aber immer noch, gefällt mir optisch einfach besser und wehtun tut's auch niemand. 😃



  • ich hab den code mal ausprobiert und bei mir belegt das programm immer geich viel speicher unabhängig davon wie häufig die schleife durchlaufen wird.


Anmelden zum Antworten