In meiner generischen Klasse Heap überlade ich den Operator <<. Folgende Implementierung ist gegeben:
template <class K, class V, int heapType>
ostream& operator<<(ostream &os, const Heap<K, V, heapType> &heap)
{
if (!heap.nodes.empty()) // nodes ist vom Typ std::map
{
// Ausgabe der heapnodes.
}
/* (1) */
}
Alles anzeigen
Die Vorgehensweise sollte klar sein: ist der Heap nicht leer, so sollen seine Knoten ausgegeben werden - sonst soll nichts passieren.
Das wirklich merkwürdige ist nun: wird an Stelle (1) nichts in den cout-Stream geschrieben (egal, ob heap.nodes.empty() == (true | false)), bekomme ich die Meldung "Speicherzugriffsfehler" auf stderr. EDIT: Meine vorherige Beschreibung des Fehlers war vielleicht nicht ganz eindeutig. Auf jeden Fall handelt es sich bei "Speicherzugriffsfehler" um einen Runtime-Error. Ich gebe diesen String natürlich nicht auf stderr aus.
Kompiler: g++ 3.3
Ich habe einige Zeit gebraucht um den Fehler zu reproduzieren, und konnte ihn auf diese Stelle einschränken. Weiss jemand, warum das so ist? Das kann doch wohl kaum ernst gemeint sein?
Danke! Greets, Martin