std:ofstream null nach open()?!
-
Mkay, das erklärt einiges.
Wieso das zweite cout null liefert, ist mir nicht ganz klar. Die Adresse sollte sich eigentlich nicht ändern.Aber das ist auch nicht das, was Du vermutlich willst. Ich denke mal, Du willst damit prüfen, ob der Stream erfolgreich geöffnet wurde:
std::cout << (*s) << std::endl; //Dereferenzieren!!
-
Eigentlich war das wirklich nur als Test gedacht, um zu zeigen, dass hier irgendwas schief läuft. Später werde ich natürlich Daten reinschieben und das nicht auf der Konsole ausgeben

Ohne Pointer runtergeschrieben geht das wie erwartet...
-
luke-r2d2 schrieb:
Was mache ich falsch?
wenn der pointer bei diesem programm tatsächlich 0 wird (ich glaube das nicht!), ist dein compiler sehr kaputt. welchen compiler benutzt du?
-
Compiler ist g++ v4. Also eigentlich müsste das funktionieren?
Dann liegt es wahrscheinlich an irgendeinem Problem woanders, wo ich die Speicherstelle benutze... Valgrind hab ich grade mal drüberlaufen lassen, hat aber nix gefunden...
-
Dein Test funktioniert bei mir einwandfrei. Da kommt zweimal die gleiche Adresse raus, genau wie es auch sein sollte. Sicher dass du genau diesen Test ausgeführt hast und nicht irgnedwo den Zeiger auf 0 gesetzt hast?
Im übrigen empfehle ich dir, wenn schon nicht den Stream auf dem Heap abzulegen, sondern die Puffer.
Bsp:
#include <map> #include <string> #include <fstream> #include <iostream> void output(std::filebuf* filebuf); int main() { std::map<std::string, std::filebuf*> mapping; mapping["Test"] = new std::filebuf(); mapping["Test"]->open("./test", std::ios::out); // usw. output(mapping["Test"]); // Aufräumen nicht vergessen ;) return 0; } void output(std::filebuf* filebuf) { std::ostream out(filebuf); out << "w00t!" << std::endl; }Grüssli
-
Okay, ich habe das Problem gerade gelöst. Es war tatsächlich einfach malloc Mist in einer ganz anderen Datei... malloc(0) ist unangenehm

Danke für eure Hilfe!
Ciao,
Lucas
-
luke-r2d2 schrieb:
malloc(0) ist unangenehm

malloc()generell.
Warum verwendest du in C++ nicht
newunddelete?
-
Ich bin (leider) dabei, C und C++ zusammen zu linken. Bin also auf malloc Ich schreibe momentan an einem großen Paket, das u.a. reines C enthält. Ein new ist hier schwierig

In reinem C++ nutze ich aber natürlich new / delete, aber leider geht das nicht immer... :xmas1:
-
Ah okay, dann nehm ich das natürlich zurück. (Ehrlich gesagt verwende ich in letzter Zeit auch ab und zu
malloc(), weil ich mit manueller Speicherverwaltung herumexperimentiere).
-
Beim Zusammenlinken kann man trotzdem saubere Grenzen zwischen den einzelnen Modulen ziehen, so dass sich die Bereiche mit C++-Streamobjekten und C-Allokiertem Speicherhandling nicht berühren. Vor allem sollte ein malloc nicht einen Pointer auf ein C++-Objekt beeinflussen können *schauder*
Was die ofstream-Pointer-Sache angeh und das Rumreichen des Streams: reich den Pointer auf den streambuf rum, oder schreib dir noch besser einen Service, z.B. als Singleton, der den Stream verwaltet.