programm stürzt beim allocieren auf speicher ab





  • Übrigens dennke ich, dass du auch ein Array mit einer festen Größe nehmen kannst:

    static char myBuf[1024];
    


  • khjkhjk schrieb:

    Übrigens dennke ich, dass du auch ein Array mit einer festen Größe nehmen kannst:

    static char myBuf[1024];
    

    bete zu den göttern, dass nwp2 diesen thread nicht findet. *fg*
    🙂



  • ;fricky schrieb:

    bete zu den göttern, dass nwp2 diesen thread nicht findet. *fg*
    🙂

    Zu spät.

    buffer[irgendeinezahl] ist fast immer schlecht siehe http://de.wikipedia.org/wiki/Puffer�berlauf

    Ich fühl mich fast wie Crocker. http://www.youtube.com/watch?v=KugBfqFNBGI
    Nur statt "Fairy Godparents" rufe ich "buffer[wirdschonreichen] ist böse!!! 😡 "



  • nwp2 schrieb:

    ;fricky schrieb:

    bete zu den göttern, dass nwp2 diesen thread nicht findet. *fg*
    🙂

    Zu spät.

    buffer[irgendeinezahl] ist fast immer schlecht siehe http://de.wikipedia.org/wiki/Puffer�berlauf

    Ich fühl mich fast wie Crocker. http://www.youtube.com/watch?v=KugBfqFNBGI
    Nur statt "Fairy Godparents" rufe ich "buffer[wirdschonreichen] ist böse!!! 😡 "

    Das ist aber kein wirkliches Argument. Schließlich kann etwas ähnliches auch mit einem dynamischen Array passieren.

    Man verhindert hier also Speicherleaks.
    Vermeidung von Überläufe kann man eben durch entsprechend sichere Programmierung erreichen...



  • nwp2 schrieb:

    buffer[irgendeinezahl] ist fast immer schlecht siehe http://de.wikipedia.org/wiki/Puffer�berlauf

    ^^das kann dir mit malloc natürlich nicht passieren, nein, überhaupt nicht.

    char *p = malloc(2);
    p[1] = 1;   // <-- preisfrage: klappt wenigstens das?
    p[2] = 2;
    

    *fg*
    🙂



  • ;fricky schrieb:

    khjkhjk schrieb:

    Übrigens dennke ich, dass du auch ein Array mit einer festen Größe nehmen kannst:

    static char myBuf[1024];
    

    bete zu den göttern, dass nwp2 diesen thread nicht findet. *fg*
    🙂

    Was war eigentlich dein konkreter Kritikpunkt?



  • khjkhjk schrieb:

    ;fricky schrieb:

    khjkhjk schrieb:

    Übrigens dennke ich, dass du auch ein Array mit einer festen Größe nehmen kannst:

    static char myBuf[1024];
    

    bete zu den göttern, dass nwp2 diesen thread nicht findet. *fg*

    Was war eigentlich dein konkreter Kritikpunkt?

    ich hab daran nichts auszusetzen.
    🙂



  • khjkhjk schrieb:

    nwp2 schrieb:

    buffer[irgendeinezahl] ist fast immer schlecht siehe http://de.wikipedia.org/wiki/Puffer�berlauf

    Das ist aber kein wirkliches Argument. Schließlich kann etwas ähnliches auch mit einem dynamischen Array passieren.

    Nein, kann es nicht. Das Wesen von malloc ist, dass man sich Gedanken macht wieviel Speicher man braucht und wieso und holt sich exakt so viel Speicher wie man braucht. Wenn man natürlich buffer[wirdschonreichen] durch buffer=malloc(wirdschonreichen) ersetzt, dann hat man natürlich nichts gewonnen, das ist schon richtig.

    khjkhjk schrieb:

    Man verhindert hier also Speicherleaks.

    Ach so? So wie ich das sehe verhinderst du keine Speicherleaks sondern definierst Speicherleaks als Standard. Statt bei einem struct bla *newstruct = malloc(sizeof(struct bla)) das free(newstruct) eventuell zu vergessen und damit Speicher zu verschwenden schreibst du lieber gleich struct bla newstruct und verschwendest den Speicher definitiv schon bevor das Programm anfängt zu laufen.
    Klar hat es den Vorteil dass man mit Speicherverschwendungen um sich werfen kann und dann sagt "Es braucht viel, dann reichts aber auch". Aber ob das die ganzen Einschränkungen wert sind?

    khjkhjk schrieb:

    Vermeidung von Überläufe kann man eben durch entsprechend sichere Programmierung erreichen...

    Klar kann man. Man kann auch Spaghetticode mit goto durch entsprechend sichere Programmierung zum laufen bringen. Der enorme Aufwand seinen eigenen Müllcode zu verstehen steht aber in keinem Verhältnis zum Nutzen.
    Außerdem glaube ich nicht, dass Leute die so schlampigen Code schreiben zu "entsprechend sicherer Programmierung" fähig sind. Entweder man macht es ordentlich oder man hackt es zusammen. Erzähl mir nicht du schreibst schlampigen Code, aber weil du so guten Code schreibst ist das schon in Ordnung.

    Nu reichts aber, hab keine Lust mehr euch belehren zu wollen, ihr hört eh nicht auf mich.



  • Nein, kann es nicht. Das Wesen von malloc ist, dass man sich Gedanken macht wieviel Speicher man braucht und wieso und holt sich exakt so viel Speicher wie man braucht. Wenn man natürlich buffer[wirdschonreichen] durch buffer=malloc(wirdschonreichen) ersetzt, dann hat man natürlich nichts gewonnen, das ist schon richtig.

    Achso, und du meinst man macht sich bei der statischen Variante keine Gedanken? Es macht keinen Sinn einen Buffer dynamisch anzulegen.

    Ach so? So wie ich das sehe verhinderst du keine Speicherleaks sondern definierst Speicherleaks als Standard. Statt bei einem struct bla *newstruct = malloc(sizeof(struct bla)) das free(newstruct) eventuell zu vergessen und damit Speicher zu verschwenden schreibst du lieber gleich struct bla newstruct und verschwendest den Speicher definitiv schon bevor das Programm anfängt zu laufen.
    Klar hat es den Vorteil dass man mit Speicherverschwendungen um sich werfen kann und dann sagt "Es braucht viel, dann reichts aber auch". Aber ob das die ganzen Einschränkungen wert sind?

    Da im Ausgangscode auch eine statische Variable angegenen war, habe ich das Keyword static übernommen. Und auch ohne wäre die Variable am Scope gebunden. Von Speicherverschwendug keine Spur. Und auch von Speicherleaks nicht.

    Klar kann man. Man kann auch Spaghetticode mit goto durch entsprechend sichere Programmierung zum laufen bringen. Der enorme Aufwand seinen eigenen Müllcode zu verstehen steht aber in keinem Verhältnis zum Nutzen.
    Außerdem glaube ich nicht, dass Leute die so schlampigen Code schreiben zu "entsprechend sicherer Programmierung" fähig sind. Entweder man macht es ordentlich oder man hackt es zusammen. Erzähl mir nicht du schreibst schlampigen Code, aber weil du so guten Code schreibst ist das schon in Ordnung.

    Hä??? Kritisierst du dich gerade selber? Die Gefahr eines Überlaufs ist in beiden Fällen (statisch und dynamisch) gegeben. Sich eine sicherere Funktion zu schreiben ist somit angebracht. Viele Implementierungen bringen diese sogar bereits mit. Wenn du diese Vorgehensweise als schlampig empfindest, ist C keine Sprache für dich. Das ist nämlich absoluter Alltag.

    Nu reichts aber, hab keine Lust mehr euch belehren zu wollen, ihr hört eh nicht auf mich.

    Aus gutem Grund 😃



  • ;fricky schrieb:

    khjkhjk schrieb:

    Übrigens dennke ich, dass du auch ein Array mit einer festen Größe nehmen kannst:

    static char myBuf[1024];
    

    bete zu den göttern, dass nwp2 diesen thread nicht findet. *fg*
    🙂

    Habs übrigens jetzt verstanden 😃


Anmelden zum Antworten