SEGFAULT: bei Klasse mit string als Member
-
Hi
Habe ein Problem, beim Kopieren einer Klasse mit std::copy bekomm ich einen Seg. fault. Der Debugger verweisst auf den operator= der Klasse und darin auf "std::string::assign () from /usr/lib/libstdc++.so.6"

Hier noch ein Minimalbeispiel:class Test { public: Test() {} Test( const Test& other ) : m_key( other.m_key ) {} const Test& operator=( const Test& other ) { m_key = other.m_key; return *this; } private: std::string m_key; };int main() { std::vector<Test> source( 42 ); std::vector<Test> target; std::copy( source.begin(), source.end(), target.begin() ); }Bin grad recht ratlos.
Was mach ich falsch?
Danke
-
Du hast vergessen, in target genug Platz für die reinkopierten Objekte anzulegen. Also entweder du vergrößerst es vor dem copy()-Aufruf oder du verwendest back_inserter.
(Nein, copy() ist nicht in der Lage, selber für Speicher zu sorgen.)
-
Dein Zielvektor ist leer, du schreibst also auf Elemente außerhalb des gültigen Bereichs. Du willst wahrscheinlich einen back_inserter benutzen.
Edit: Hmpf gegen CStoll kommt man nicht an
Also noch was substanzielles: Spar dir den Kopierkonstruktor und den Zuweisungsoperator, die brauchst du hier nicht.
-
Target hat nicht so viele Elemente.
Inserter wären eine Lösung:std::copy( source.begin(), source.end(), std::back_inserter(target) );
-
Bashar schrieb:
Edit: Hmpf gegen CStoll kommt man nicht an

Klar, du mußt nur die richtige Zeit dafür finden
