ostream als Fkt.Argum.



  • Wieso geht das einmal, nach dem zweiten Aufruf crasht das Programm:
    (bcc32, winXP, DOS-Zeile)

    void gibaus( ostream& aus)
    {
    aus << "sowieso und sowieso\n" ;
    aus.write ( irgendwas...) ;
    aus << "mehr davon....\n" ;
    ...
    aus << "und noch mehr..." ;
    return ;
    }

    int main( int argc, char* argv[] )
    {
    ...

    gibaus( cout ) ;
    gibaus( cout ) ;
    // hier stürzt es...
    gibaus(cout );

    cout << "hallo" ; // nicht mehr sichtbar
    }

    ????

    Übrigens dasselbe Problem, wenn

    1. void gibaus( ostream* aus){ aus->write(...) oder *aus << ...
    2. ofstream statt ostream und ein Filehandle statt cout

    Danke für Hinweise



  • Zeig doch mal deine write-Aufruf.
    Sollte nämlich eigentlich funktionieren, wenn Du da write("irgendwas", strlen("irgendwas")) oder so stehen hast.



  • Ich benutze ganz normales Schreiben (siehe Anfangsposting) ohne irgendwelche
    Besonderheiten.

    Der Witz kommt aber erst noch:
    Wenn ich die Zeilen innerhalb Funktion gibaus( ostream& aus)
    nicht mehr als Funktion schreibe, sondern direkt in main()
    hineinkopiere,
    d.h.
    main()
    ...
    sowieso
    ...
    ...
    ofstream aus; aus.open( ...oder so ähnlich...) ;
    aus << "blabla" ;
    aus << "noch was..." ;
    aus << "und noch mehr..." ;
    } // ende main

    ...Dann crasht das Programm nicht mehr, selbst wenn der Inhalt
    von aus 4-mal oder öfter hinterinander steht.

    Und auch komisch:
    Es crasht auch nicht, wenn ich die Funktion
    gibaus(ostream& aus)
    als Macro schreibe, also

    #define gibaus(aus) (aus) << "hallo, noch mehr"; (aus) << "das auch noch" ....
    usw...

    - das Macro kann ich so oft aufrufen wie ich will, die Funktion
    crasht nach dem zweiten Aufruf (der erste geht aber noch!)

    - ich finde das komisch. Nicht wahr?
    Danke für Hinweise.


Log in to reply