<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Speicherfehler im 1. elem vom vector]]></title><description><![CDATA[<p>Ich habe das Problem, dass das 1. Element eines Vektors falsche Werte beinhaltet. Ich habe das hier schon einmal angesprochen, es konnte mir aber nicht so richtig geholfen werden. Nun habe ich die Stelle lokalisiert und hoffe, dass jmd mir weiterhelfen kann.</p>
<p>Ich habe mir zwei eigene Klassen geschrieben mTrace und mPoint</p>
<pre><code class="language-cpp">class mTrace{
public:
	/// mTrace empty constructor
	mTrace()
		: traceID_(-1), color_(-1), numPoints_(-1) {points_.clear();}
	/// mTrace constructor
	mTrace(const int&amp; traceID, const int&amp; color, const int&amp; numPoints, const std::vector&lt;mPoint&gt;&amp; points)
		: traceID_(traceID), color_(color), numPoints_(numPoints), points_(points){}
	/// mTrace copy constructor
	mTrace(const mTrace &amp;mt)
		: traceID_(mt.traceID()), color_(mt.color()), numPoints_(mt.numPoints()), points_(mt.points()){}
	/// mTrace destructor
	virtual ~mTrace() {}

//... Get-, Set-Methoden, Operatoren

	void setPoint(const mPoint &amp;pt, const int pos){
		points_.at(pos) = pt;
	};
	/// replace points
	void setPoints(const std::vector&lt;mPoint&gt; vec){points_.clear(); points_ = vec;};
	/// remove a point from the trace
	void remPoint(const int &amp;pos){std::vector&lt;mPoint&gt;:: iterator it = points_.begin() + pos; points_.erase(it);};

private:
	int traceID_;
	int color_;
	int numPoints_;
	std::vector&lt;mPoint&gt; points_;
};
</code></pre>
<pre><code class="language-cpp">class mPoint{
public:
	//Constructor
	/// mPoint empty constuctor
	mPoint()
		: x_(-1), y_(-1) {}
	/// mPoint constructor
	mPoint(const int&amp; x, const int&amp; y)
		: x_(x), y_(y) {}
	/// mPoint copy constructor
	mPoint(const mPoint&amp; mp)
		: x_(mp.x()), y_(mp.y()) {}
	///mPoint destructor
	virtual ~mPoint() {}

//... Get-, Set-Methoden, Operatoren

private:
	int x_;
	int y_;
};
</code></pre>
<p>Nun lese ich in der Funktion nodeToTrace() meine Daten ein</p>
<pre><code class="language-cpp">mTrace nodeToTrace(TiXmlElement* e) {

	if (strcmp(e-&gt;Value(), &quot;Trace&quot;) != 0)
		throw runtime_error(string(&quot;wrong trace &quot;) + e-&gt;Value());

	const char *traceID, *color, *numPoints;

	traceID = e-&gt;Attribute(&quot;traceID&quot;);
	color = e-&gt;Attribute(&quot;color&quot;);
	numPoints = e-&gt;Attribute(&quot;numPoints&quot;);

	vector&lt;mPoint&gt; vec;
	for (TiXmlElement* element = e-&gt;FirstChildElement(); element; element = element-&gt;NextSiblingElement()) {
		vec.push_back(nodeToPoint(element));
	}

////////////hier passiert der Fehler!
	mTrace result(atoi(traceID), atoi(color), atoi(numPoints), vec);

//	result.setPoints(vec);
//	result.setPoint(vec.at(0), 0);
//	result.remPoint(0);

	for(vector&lt;mPoint&gt;::iterator pt = vec.begin(); pt != vec.end(); ++pt){
		cout &lt;&lt; *pt &lt;&lt; endl;
	}

	cout &lt;&lt; result &lt;&lt; endl;

	return result;
}
</code></pre>
<p>In meinem Vector <em>vec</em> stehen die Daten korrekt. In meinem element <em>result</em> vom Typ mTrace stimmt der erste Eintag vom Vektor nicht. Sowohl, wenn ich ihn oben über den Kontruktor erzeuge, noch wenn ich den gesamten Vektor in <em>result</em> überschreibe, noch, wenn ich den ersten Punkt im Vektor von Result ersetzen möchte. Ich habe ebenfalls probiert einen leeren Punkt (0,0) an den Anfang zu setzen und später wieder zu löschen, doch leider ohne Erfolg. Der erste Punkt wurde zwar gelöscht, jedoch war hat dann das neue erste Element falsche Einträge. Übergehen kann ich es nicht, da im späteren Verlauf, die Vektoren umsortiert werden. Weiss jmd. wo das Problem ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235618/speicherfehler-im-1-elem-vom-vector</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 04:07:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235618.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Mar 2009 11:30:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 12:20:39 GMT]]></title><description><![CDATA[<p>Ich habe das Problem, dass das 1. Element eines Vektors falsche Werte beinhaltet. Ich habe das hier schon einmal angesprochen, es konnte mir aber nicht so richtig geholfen werden. Nun habe ich die Stelle lokalisiert und hoffe, dass jmd mir weiterhelfen kann.</p>
<p>Ich habe mir zwei eigene Klassen geschrieben mTrace und mPoint</p>
<pre><code class="language-cpp">class mTrace{
public:
	/// mTrace empty constructor
	mTrace()
		: traceID_(-1), color_(-1), numPoints_(-1) {points_.clear();}
	/// mTrace constructor
	mTrace(const int&amp; traceID, const int&amp; color, const int&amp; numPoints, const std::vector&lt;mPoint&gt;&amp; points)
		: traceID_(traceID), color_(color), numPoints_(numPoints), points_(points){}
	/// mTrace copy constructor
	mTrace(const mTrace &amp;mt)
		: traceID_(mt.traceID()), color_(mt.color()), numPoints_(mt.numPoints()), points_(mt.points()){}
	/// mTrace destructor
	virtual ~mTrace() {}

//... Get-, Set-Methoden, Operatoren

	void setPoint(const mPoint &amp;pt, const int pos){
		points_.at(pos) = pt;
	};
	/// replace points
	void setPoints(const std::vector&lt;mPoint&gt; vec){points_.clear(); points_ = vec;};
	/// remove a point from the trace
	void remPoint(const int &amp;pos){std::vector&lt;mPoint&gt;:: iterator it = points_.begin() + pos; points_.erase(it);};

private:
	int traceID_;
	int color_;
	int numPoints_;
	std::vector&lt;mPoint&gt; points_;
};
</code></pre>
<pre><code class="language-cpp">class mPoint{
public:
	//Constructor
	/// mPoint empty constuctor
	mPoint()
		: x_(-1), y_(-1) {}
	/// mPoint constructor
	mPoint(const int&amp; x, const int&amp; y)
		: x_(x), y_(y) {}
	/// mPoint copy constructor
	mPoint(const mPoint&amp; mp)
		: x_(mp.x()), y_(mp.y()) {}
	///mPoint destructor
	virtual ~mPoint() {}

//... Get-, Set-Methoden, Operatoren

private:
	int x_;
	int y_;
};
</code></pre>
<p>Nun lese ich in der Funktion nodeToTrace() meine Daten ein</p>
<pre><code class="language-cpp">mTrace nodeToTrace(TiXmlElement* e) {

	if (strcmp(e-&gt;Value(), &quot;Trace&quot;) != 0)
		throw runtime_error(string(&quot;wrong trace &quot;) + e-&gt;Value());

	const char *traceID, *color, *numPoints;

	traceID = e-&gt;Attribute(&quot;traceID&quot;);
	color = e-&gt;Attribute(&quot;color&quot;);
	numPoints = e-&gt;Attribute(&quot;numPoints&quot;);

	vector&lt;mPoint&gt; vec;
	for (TiXmlElement* element = e-&gt;FirstChildElement(); element; element = element-&gt;NextSiblingElement()) {
		vec.push_back(nodeToPoint(element));
	}

////////////hier passiert der Fehler!
	mTrace result(atoi(traceID), atoi(color), atoi(numPoints), vec);

//	result.setPoints(vec);
//	result.setPoint(vec.at(0), 0);
//	result.remPoint(0);

	for(vector&lt;mPoint&gt;::iterator pt = vec.begin(); pt != vec.end(); ++pt){
		cout &lt;&lt; *pt &lt;&lt; endl;
	}

	cout &lt;&lt; result &lt;&lt; endl;

	return result;
}
</code></pre>
<p>In meinem Vector <em>vec</em> stehen die Daten korrekt. In meinem element <em>result</em> vom Typ mTrace stimmt der erste Eintag vom Vektor nicht. Sowohl, wenn ich ihn oben über den Kontruktor erzeuge, noch wenn ich den gesamten Vektor in <em>result</em> überschreibe, noch, wenn ich den ersten Punkt im Vektor von Result ersetzen möchte. Ich habe ebenfalls probiert einen leeren Punkt (0,0) an den Anfang zu setzen und später wieder zu löschen, doch leider ohne Erfolg. Der erste Punkt wurde zwar gelöscht, jedoch war hat dann das neue erste Element falsche Einträge. Übergehen kann ich es nicht, da im späteren Verlauf, die Vektoren umsortiert werden. Weiss jmd. wo das Problem ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674028</guid><dc:creator><![CDATA[Flaut]]></dc:creator><pubDate>Wed, 04 Mar 2009 12:20:39 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 12:04:37 GMT]]></title><description><![CDATA[<p>Der Fehler steck wohl nicht im gezeigten Code. Zeig mal mTrace::points(). Oder am besten gleich ein kompilierbares Minimalbeispiel.</p>
<p>Deine Klassen brauchen übrigens weder Copykonstruktor noch Destruktor, wenn da nicht noch irgendwelche Member mit dynamischer Speicherverwaltung drinstecken.</p>
<p>Und points_.clear() ist an beiden Stellen, wo es benutzt wird, unnötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674054</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 04 Mar 2009 12:04:37 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 12:12:51 GMT]]></title><description><![CDATA[<pre><code>mTrace result(atoi(traceID), atoi(color), atoi(numPoints), vec);
</code></pre>
<p>du übergibst den temporären rückgabewert von atoi als referenz.<br />
das macht probleme vermute ich.</p>
<p>probier mal die ergebnisse von atoi in einer variable zu speichern und dann dem konstruktor zu übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674061</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Wed, 04 Mar 2009 12:12:51 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 12:29:14 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a> Auch wenn ich Copyconstructor und Destuctor nicht benötige, schaden richten sie keinen an. das points_.clear() stammt von etlichen bisherigen korrektur Versuchen. Mit einem kompilierbaren Code wird schwierig, da noch ein ganzer Rattenschwanz mit dran hängt (Boost-Library, TinyXML oder libpng beispielsweise).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17844">@ihoernchen</a> habe die Werte zwischengespeichert mit dem gleichen Ergebnis. Hatte ich aber auch bereits vermutet. Denn ich hatte schon eine Variante, in der ich mir erst <em>mTrace result</em> anlege und danach mittels Set-Methoden den Inhalt verändere.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674081</guid><dc:creator><![CDATA[Flaut]]></dc:creator><pubDate>Wed, 04 Mar 2009 12:29:14 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 12:29:32 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17327">@Flaut</a><br />
Wenn du den CopyCtor und den Dtor schon mitnimmst, dann halt dich bitte auch an das &quot;Law of the Big Three&quot;. Dann ist deine Aussage auch gerechtfertigt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Aber wenn du nur halb halb implementierst, lass es lieber weg oder machs ordentlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674085</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 04 Mar 2009 12:29:32 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 12:37:52 GMT]]></title><description><![CDATA[<p>Flaut schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a> Auch wenn ich Copyconstructor und Destuctor nicht benötige, schaden richten sie keinen an.</p>
</blockquote>
<p>Unnötige Funktionen lenken vom Probem ab, machen den Code unübersichtlicher und bieten zusätzliche Fehlerquellen.</p>
<p>Verpass deinen Klassen doch auch noch einen Zuweisungsoperator. Wenn schon überflüssiger Code, dann richtig.</p>
<p>Flaut schrieb:</p>
<blockquote>
<p>Mit einem kompilierbaren Code wird schwierig, da noch ein ganzer Rattenschwanz mit dran hängt (Boost-Library, TinyXML oder libpng beispielsweise).</p>
</blockquote>
<p>Boost und libpng braucht man hier offensichtlich nicht. Und diesen TiXmlElement* durch ein Dummy zu ersetzen, sollte doch auch kein Problem sein.</p>
<p>Falls doch, dann zeig halt mal mTrace::points().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674091</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 04 Mar 2009 12:37:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 13:03:59 GMT]]></title><description><![CDATA[<p>Ich rate dir die ganzen const int Referenzen zu entfernen. Die dienen eher als Fehlerquelle. Bringen im Gegenzug nichts. Unabhängig von deinem Problem.</p>
<p>Ansonsten wie MFK schon sagte wird es schwer das ganze ohne kompilierbaren Code zu prüfen.</p>
<p>Fehlerquellen:<br />
- const int Referenzen<br />
- nodeToPoint: Was macht nodeToPoint? Bzw. was wird zurückgeliefert?<br />
- Was passiert, wenn du in nodeToTrace vec mit Dummy-Werten füllst? Geht das immer noch schief?<br />
- Was passiert im operator&lt;&lt; für mTrace?<br />
- Wieviele Werte sind im vector (der später ja auch kopiert wird)? Passiert es bei großen wie bei kleinen Mengen? Was passiert, wenn vec genau 1 Element enthält?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674109</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Wed, 04 Mar 2009 13:03:59 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 13:17:28 GMT]]></title><description><![CDATA[<p>Sollte die Methode nicht eine konstante Referenz bekommen oder ist die Kopiererei hier gewollt?</p>
<pre><code class="language-cpp">void setPoints( const std::vector&lt;mPoint&gt; vec )
{
  points_.clear(); 
  points_ = vec;
}
</code></pre>
<p>Und was gibt nodeToPoint() im Fehlerfall zurück? Wenn das erste Element Tünneff ist, kann das deinen Fehler auslösen?</p>
<p>Gruß Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674116</guid><dc:creator><![CDATA[kimmi]]></dc:creator><pubDate>Wed, 04 Mar 2009 13:17:28 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 13:31:31 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a>: Was meinst Du mit mTrace::points() ?</p>
<p>ihoernchen schrieb:</p>
<blockquote>
<p>Ich rate dir die ganzen const int Referenzen zu entfernen. Die dienen eher als Fehlerquelle. Bringen im Gegenzug nichts. Unabhängig von deinem Problem.</p>
</blockquote>
<p>gemacht</p>
<p>ihoernchen schrieb:</p>
<blockquote>
<p>Ansonsten wie MFK schon sagte wird es schwer das ganze ohne kompilierbaren Code zu prüfen.</p>
</blockquote>
<p>ich versuche es zu packen und nen link einzubinden</p>
<p>ihoernchen schrieb:</p>
<blockquote>
<p>- nodeToPoint: Was macht nodeToPoint? Bzw. was wird zurückgeliefert?</p>
</blockquote>
<p>liest die Datei aus und gibt einen Wert vom Typ mPoint zurück.</p>
<p>Bsp.<br />
&lt;Point num=&quot;0&quot;&gt;4949 1751&lt;/Point&gt;<br />
&lt;Point num=&quot;1&quot;&gt;4977 1676&lt;/Point&gt;<br />
&lt;Point num=&quot;2&quot;&gt;5005 1608&lt;/Point&gt;</p>
<p>ihoernchen schrieb:</p>
<blockquote>
<p>- Was passiert, wenn du in nodeToTrace vec mit Dummy-Werten füllst? Geht das immer noch schief?</p>
</blockquote>
<p>ja, gleiche fehler</p>
<p>ihoernchen schrieb:</p>
<blockquote>
<p>- Was passiert im operator&lt;&lt; für mTrace?</p>
</blockquote>
<pre><code class="language-cpp">inline std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const mTrace&amp; trace){
	out &lt;&lt; &quot;TraceID: &quot; &lt;&lt; trace.traceID() &lt;&lt; &quot; Color: &quot; &lt;&lt; trace.color()
		&lt;&lt; &quot; NumPoints: &quot; &lt;&lt; trace.numPoints() &lt;&lt; &quot;\n&quot;;
	for(std::vector&lt;mPoint&gt;::iterator it = trace.points().begin(); it!=trace.points().end(); ++it){
		out &lt;&lt; *it &lt;&lt; '\n';
	}
	return out;
}
</code></pre>
<p>ihoernchen schrieb:</p>
<blockquote>
<p>- Wieviele Werte sind im vector (der später ja auch kopiert wird)? Passiert es bei großen wie bei kleinen Mengen? Was passiert, wenn vec genau 1 Element enthält?</p>
</blockquote>
<p>Das variiert, aber im Schnitt 40 Einträge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674123</guid><dc:creator><![CDATA[Flaut]]></dc:creator><pubDate>Wed, 04 Mar 2009 13:31:31 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 13:35:35 GMT]]></title><description><![CDATA[<p>Flaut schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a>: Was meinst Du mit mTrace::points() ?</p>
</blockquote>
<p>Deine Klasse mTrace hat eine Methode namens points. Jedenfalls wird sie im Copykonstruktor benutzt.</p>
<p>Flaut schrieb:</p>
<blockquote>
<p>ihoernchen schrieb:</p>
<blockquote>
<p>- nodeToPoint: Was macht nodeToPoint? Bzw. was wird zurückgeliefert?</p>
</blockquote>
<p>liest die Datei aus und gibt einen Wert vom Typ mPoint zurück.</p>
</blockquote>
<p>Das ist, was die Methode tun <em>soll</em>. Um zu beurteilen, was sie tatsächlich tut, musst du schon den Code zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674127</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 04 Mar 2009 13:35:35 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 13:36:09 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2569">@kimmi</a> wenn ich <em>vec</em> ausgebe, stimmt der eintrag, aber in <em>result.points_</em> nicht. Gebe ja beides am Ende der Funktion aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674128</guid><dc:creator><![CDATA[Flaut]]></dc:creator><pubDate>Wed, 04 Mar 2009 13:36:09 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 13:50:55 GMT]]></title><description><![CDATA[<p>den Copyconstructor habe ich schon entfernt, um möglichst wenig Fehlercode zu haben. Aber der Vollständigkeit halber.</p>
<pre><code class="language-cpp">/// returns the Points from the Trace
std::vector&lt;mPoint&gt; points() const {return points_;};
</code></pre>
<p>und nodeToPoint</p>
<pre><code class="language-cpp">mPoint nodeToPoint(TiXmlElement* pt) {

	if (pt &amp;&amp; strcmp(pt-&gt;Value(), &quot;Point&quot;) == 0) {
		const char* c = textValue(pt);
		int x = 0, y = 0;
		for (unsigned int i = 0; i &lt; strlen(c); ++i) {
			if (c[i] == ' ') {
				x = y;
				y = 0;
				++i;
			}
			y = 10 * y + (c[i] - 48);
		}
		return mPoint(x, y);
	} else
		throw runtime_error(string(&quot;wrong point &quot;) + pt-&gt;Value());
}
</code></pre>
<p>bevor die Frage kommt textValue</p>
<pre><code class="language-cpp">const char* textValue(TiXmlElement* e) {

	TiXmlNode* first = e-&gt;FirstChild();
	if (first != 0 &amp;&amp; first == e-&gt;LastChild() &amp;&amp; first-&gt;Type()
			== TiXmlNode::TEXT)
		return first-&gt;Value();
	else {
		throw runtime_error(string(&quot;wrong element &quot;) + e-&gt;Value());
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1674136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674136</guid><dc:creator><![CDATA[Flaut]]></dc:creator><pubDate>Wed, 04 Mar 2009 13:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 14:05:52 GMT]]></title><description><![CDATA[<p>mTrace.points() gibt eine Kopie des Vectors zurück.</p>
<p>Die Iteratoren, die begin() und end() in deinem operator&lt;&lt; liefern, gehören daher zu unterschiedlichen Kopien des Vectors. Außerdem sind die Iteratoren sofort wieder ungültig, weil die Kopien gleich nach dem Aufruf von points() wieder zerstört werden.</p>
<p>Lass points() eine konstante Referenz zurückgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674146</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 04 Mar 2009 14:05:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 14:08:57 GMT]]></title><description><![CDATA[<p>mh was mir noch auffällt</p>
<pre><code>// operator&lt;&lt;
for(std::vector&lt;mPoint&gt;::iterator it = trace.points().begin(); it!=trace.points().end(); ++it)
</code></pre>
<pre><code>std::vector&lt;mPoint&gt; points() const {return points_;};
</code></pre>
<p>Du gibst eine Kopie des Vectors zurück. Das passt nicht.<br />
Hier solltest du eine Referenz zurückgeben.</p>
<pre><code>const std::vector&lt;mPoint&gt;&amp; points() const {return points_;};
</code></pre>
<p>Macht Sinn damit der Vector nicht immer kopiert wird.</p>
<p>Das ist auch das Problem an der Schleife oben. Warum das überhaupt funktioniert ist komisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Edit: zu langsam <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674151</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Wed, 04 Mar 2009 14:08:57 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 15:36:13 GMT]]></title><description><![CDATA[<p>Daran hat es tatsächlich gelegen. Funktioniert aber auch nur, da es sich um eine Klasse handelt. Denn bei Funktionen sollten keine Referenzen zurück gegeben werden, da man sonst auf einen verwaisten Speicher zugreift, oder liege ich da auch falsch?</p>
<p>Super danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674201</guid><dc:creator><![CDATA[Flaut]]></dc:creator><pubDate>Wed, 04 Mar 2009 15:36:13 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Wed, 04 Mar 2009 17:41:47 GMT]]></title><description><![CDATA[<p>Du darfst keine Referenzen oder Zeiger auf lokale Variablen, die sich innerhalb einer Funktion befinden, zurückgeben. Grund: nach verlassen der Funktion ist die Variable weg.<br />
Dabei ist es egal ob Methode (einer Klasse) oder ('freie') Funktion.</p>
<pre><code>// böse
MyClass&amp; Funktion()
{
  MyClass m;
  return m;
}
MyClass* Funktion()
{
  MyClass m;
  return &amp;m;
}

// ok
MyClass&amp; Funktion()
{
  static MyClass m; // statische Variablen bleiben bis zum Programmende
  return m;
}
MyClass* Funktion()
{
  static MyClass m; // ginge natürlich auch: MyClass* m = new MyClass; return m;
  return &amp;m;
}

// auch ok
MyClass m;
MyClass&amp; Funktion() // selbes für MyClass*
{
  return m;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1674282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674282</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Wed, 04 Mar 2009 17:41:47 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler im 1. elem vom vector on Fri, 06 Mar 2009 13:51:36 GMT]]></title><description><![CDATA[<p>ihoernchen schrieb:</p>
<blockquote>
<pre><code>// ginge natürlich auch: MyClass* m = new MyClass;
</code></pre>
</blockquote>
<p>Davon würde ich sehr stark abraten, besonders wenn es anders geht. Die Wahrscheinlichkeit, dass der Aufrufer vergisst, den Speicher freizugeben, ist einfach zu hoch. Mindestens ein Smart Pointer oder besser gleich eine Objektrückgabe wäre eine Alternative.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675283</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Mar 2009 13:51:36 GMT</pubDate></item></channel></rss>