<?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[Programmabsturz bei Templateverwendung (operator=)]]></title><description><![CDATA[<p>Hallo liebe Gemeinschaft,</p>
<p>ich hab da ein merkwürdiges Problem bei meinem Klassentemplate.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class KlassenTemplate
{
	public:
		KlassenTemplate(T*);
		T&amp; operator* ();
		T&amp; operator= (T&amp;);

	private:
		T* pointer;

};
</code></pre>
<p>Realisiert sind die Methoden so:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
KlassenTemplate&lt;T&gt;::KlassenTemplate(T* p)
{
	p=NULL;
}

template &lt;typename T&gt;
T&amp; KlassenTemplate&lt;T&gt;::operator*()
{
	return *pointer;
}

template &lt;typename T&gt;
T&amp; KlassenTemplate&lt;T&gt;::operator=(T&amp; neu)
{
	this=&amp;neu;
	return this;
}
</code></pre>
<p>Wenn ich jetzt in der main.cpp</p>
<pre><code class="language-cpp">int main()
{
	KlassenTemplate&lt;int&gt; p=new int;
	*p=3;
}
</code></pre>
<p>aufrufe, dann kompiliert das Programm zwar ordentich, stürzt aber mit einem Segmentation Fault ab.<br />
Wo ich hier aber auf falschen Speicher zugreifen könnte, sehe ich nicht.</p>
<p>Danke für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236288/programmabsturz-bei-templateverwendung-operator</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 01:38:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236288.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Mar 2009 03:03:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmabsturz bei Templateverwendung (operator=) on Fri, 13 Mar 2009 03:03:47 GMT]]></title><description><![CDATA[<p>Hallo liebe Gemeinschaft,</p>
<p>ich hab da ein merkwürdiges Problem bei meinem Klassentemplate.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class KlassenTemplate
{
	public:
		KlassenTemplate(T*);
		T&amp; operator* ();
		T&amp; operator= (T&amp;);

	private:
		T* pointer;

};
</code></pre>
<p>Realisiert sind die Methoden so:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
KlassenTemplate&lt;T&gt;::KlassenTemplate(T* p)
{
	p=NULL;
}

template &lt;typename T&gt;
T&amp; KlassenTemplate&lt;T&gt;::operator*()
{
	return *pointer;
}

template &lt;typename T&gt;
T&amp; KlassenTemplate&lt;T&gt;::operator=(T&amp; neu)
{
	this=&amp;neu;
	return this;
}
</code></pre>
<p>Wenn ich jetzt in der main.cpp</p>
<pre><code class="language-cpp">int main()
{
	KlassenTemplate&lt;int&gt; p=new int;
	*p=3;
}
</code></pre>
<p>aufrufe, dann kompiliert das Programm zwar ordentich, stürzt aber mit einem Segmentation Fault ab.<br />
Wo ich hier aber auf falschen Speicher zugreifen könnte, sehe ich nicht.</p>
<p>Danke für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679085</guid><dc:creator><![CDATA[althippie]]></dc:creator><pubDate>Fri, 13 Mar 2009 03:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz bei Templateverwendung (operator=) on Fri, 13 Mar 2009 06:15:04 GMT]]></title><description><![CDATA[<p>denk mal nach</p>
<p>in der definition des = ops weist du deinem pointer eine addresse zu<br />
wäre kein problem aber dann darfst du nur variablen damit benutzen</p>
<p>also nur sowas</p>
<pre><code class="language-cpp">int main()
{
    int i = 3;
    Klassentemplate&lt;int&gt; p = new int;
    *p = i;
}
</code></pre>
<p>allerdings ist das so wie du es schreibst nicht so ganz gut glaube ich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679101</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 13 Mar 2009 06:15:04 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz bei Templateverwendung (operator=) on Fri, 13 Mar 2009 07:00:46 GMT]]></title><description><![CDATA[<p>althippie schrieb:</p>
<blockquote>
<p>[...] dann kompiliert das Programm zwar ordentich</p>
</blockquote>
<p>Welcher Compiler (zum Henker) kompiliert <code>this = &amp;neu</code> ?!?</p>
<p>Und im Konstruktor schau nochmal genau hin welchem Pointer Du NULL zuweist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679107</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 13 Mar 2009 07:00:46 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz bei Templateverwendung (operator=) on Fri, 13 Mar 2009 14:25:14 GMT]]></title><description><![CDATA[<p>Habe mir eure Tipps zu Herzen genommen.</p>
<p>Es ist natürlich Blösinn im Konstruktor die Adresse der Variablen T auf NULL zu setzen!!</p>
<p>Gemeint ist natürlich, dass der pointer jetzt auch auf T zeigt. Damit hat es hervorragend geklappt.</p>
<p>Als Kompiler nutze ich g++-4.3.2</p>
<p>Danke nochmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679370</guid><dc:creator><![CDATA[althippie]]></dc:creator><pubDate>Fri, 13 Mar 2009 14:25:14 GMT</pubDate></item></channel></rss>