Speicherverlust mit stringstream



  • Hallo liebe Leute, ich versuche seit einer Woche einen von stringstream belegten Speicherplatz freizugeben und es klapp aber nicht und ich bin sogar schon verzweifelt. Vielleicht kann mir jemand helfen, ich habe wirklich alles vesucht.
    mein Code sieht ungefähr so aus

    double ** h;
    ..............
    stringstream os;
    ................
    for (int i=0; i<=239; i++)
    os.write((char*)h[i], 40*sizeof(double));
    .................

    Nach der Schleife vergrössert sich der Speicherplatz und auch die Freigabe von h bringt nichts.

    Danke



  • ketans schrieb:

    ...einen von stringstream belegten Speicherplatz freizugeben ...

    Warum ?

    ketans schrieb:

    ...

    double ** h;
    ....
    stringstream os;
    ................
    for (int i=0; i<=239; i++)
        os.write((char*)h[i], 40*sizeof(double));
    .................
    

    Nach der Schleife vergrössert sich der Speicherplatz und auch die Freigabe von h bringt nichts.

    Danke

    Sorry, aber da ist eine Menge "Fragwürdiges" drin:
    1.) Wenn Du die Ausgabe so machst, wie es bei den std-streams gedacht ist (mit operator<<(), kannst Du Dir den üblen (und vermutlich schwer falschen) Cast sparen ... und hast gleichzeitig sichereren Code.

    for (int i=0; i<=239; i++)
        for(int j=0; j<40; ++j) 
    ´       os << h[i][j];
    

    2.) Wenn Du Werte in einen Stream kpoierst, wird er größer ... egal, wie oft Du Deine "Kopiervorlage" (hier also Speicherbereiche, auf die h zeigt) freigibst. Ist etwa so, also wolltest Du den Inhalt eines Buches löschen, indem Du die Schreibmaschine verbrennst, auf der es geschrieben wurde.
    Der Speicherverwaltung von Streams braucht man nicht auf die Sprünge zu helfen, das machen die schon gut allein ... aber solange sie ihre "Ladung nicht losgeworden" sind (sprich: Der Inhalt ausgelesen wurde), behalten sie ihn.
    Allerdings kann man ihn mit flush() dazu bringen, es "jetzt" zu tun.

    Gruß,

    Simon2.


Anmelden zum Antworten