<?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[Wieso stürzt das Programm ab?]]></title><description><![CDATA[<p>Bei dem Code stürzt das Programm ab, wieso?</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Client.h&quot;
#include &quot;BinTree.h&quot;

using namespace std;

int main() {
	BinTree&lt;Client&gt; b1 = BinTree&lt;Client&gt;(); // Löst Fehler aus
	//Client *c1 = new Client(4300, &quot;Hakon H.&quot;);
	return 0;
}
</code></pre>
<p>BinTree.h</p>
<pre><code class="language-cpp">#ifndef BINTREE_H
#define BINTREE_H
#include &quot;Node.h&quot;
#include &quot;Root.h&quot;
#include &quot;Client.h&quot;

template &lt;class T&gt;
class BinTree {

private:
	Root&lt;T&gt; *root;

public:
	BinTree();
	~BinTree();
	void Append(T*);
};

// Definitionen

template &lt;class T&gt;
BinTree&lt;T&gt;::BinTree() {
	root = new Root&lt;T&gt;();
}

template &lt;class T&gt;
BinTree&lt;T&gt;::~BinTree() {
	delete root;
}

template &lt;class T&gt;
void BinTree&lt;T&gt;::Append(T *data) {
	root-&gt;Append(data);
}

#endif
</code></pre>
<p>Root.h</p>
<pre><code class="language-cpp">#ifndef ROOT_H
#define ROOT_H
#include &quot;Node.h&quot;
#include &quot;TreeNode.h&quot;

template &lt;class T&gt;
class Root : public Node&lt;T&gt; {

private:
	Node&lt;T&gt; *next;

public:
	Root();
	~Root();
	Node&lt;T&gt;* Append(T* data);
};

// Definitionen

template &lt;class T&gt;
Root&lt;T&gt;::Root() {
	next = new TreeNode&lt;T&gt;(this);
}

template &lt;class T&gt;
Root&lt;T&gt;::~Root() {
	delete next;
}

template &lt;class T&gt;
Node&lt;T&gt;* Root&lt;T&gt;::Append(T *data) {
	next-&gt;Append(data);
	return next;
}

#endif
</code></pre>
<p>TreeNode.h</p>
<pre><code class="language-cpp">#ifndef TREENODE_H
#define TREENODE_H
#include &quot;Node.h&quot;

template &lt;class T&gt;
class TreeNode : public Node&lt;T&gt; {

private:
	Node&lt;T&gt; *next;
	Node&lt;T&gt; *prev;
	T *data;

public:
	TreeNode(Node&lt;T&gt;*);
	~TreeNode();
	Node&lt;T&gt;* Append(T*);
};

// Definitionen

template &lt;class T&gt;
TreeNode&lt;T&gt;::TreeNode(Node&lt;T&gt; *prev) {
	this-&gt;prev = prev;
}

template &lt;class T&gt;
TreeNode&lt;T&gt;::~TreeNode() {
	delete next;
}

template &lt;class T&gt;
Node&lt;T&gt;* TreeNode&lt;T&gt;::Append(T *data) {
	if(this-&gt;data == NULL) {
		this-&gt;data = data;
		next = new TreeNode&lt;T&gt;(this);
	}
	else
		next-&gt;Append(data);
	return this;
}

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/241447/wieso-stürzt-das-programm-ab</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 12:42:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241447.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 May 2009 17:01:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 17:14:56 GMT]]></title><description><![CDATA[<p>Bei dem Code stürzt das Programm ab, wieso?</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Client.h&quot;
#include &quot;BinTree.h&quot;

using namespace std;

int main() {
	BinTree&lt;Client&gt; b1 = BinTree&lt;Client&gt;(); // Löst Fehler aus
	//Client *c1 = new Client(4300, &quot;Hakon H.&quot;);
	return 0;
}
</code></pre>
<p>BinTree.h</p>
<pre><code class="language-cpp">#ifndef BINTREE_H
#define BINTREE_H
#include &quot;Node.h&quot;
#include &quot;Root.h&quot;
#include &quot;Client.h&quot;

template &lt;class T&gt;
class BinTree {

private:
	Root&lt;T&gt; *root;

public:
	BinTree();
	~BinTree();
	void Append(T*);
};

// Definitionen

template &lt;class T&gt;
BinTree&lt;T&gt;::BinTree() {
	root = new Root&lt;T&gt;();
}

template &lt;class T&gt;
BinTree&lt;T&gt;::~BinTree() {
	delete root;
}

template &lt;class T&gt;
void BinTree&lt;T&gt;::Append(T *data) {
	root-&gt;Append(data);
}

#endif
</code></pre>
<p>Root.h</p>
<pre><code class="language-cpp">#ifndef ROOT_H
#define ROOT_H
#include &quot;Node.h&quot;
#include &quot;TreeNode.h&quot;

template &lt;class T&gt;
class Root : public Node&lt;T&gt; {

private:
	Node&lt;T&gt; *next;

public:
	Root();
	~Root();
	Node&lt;T&gt;* Append(T* data);
};

// Definitionen

template &lt;class T&gt;
Root&lt;T&gt;::Root() {
	next = new TreeNode&lt;T&gt;(this);
}

template &lt;class T&gt;
Root&lt;T&gt;::~Root() {
	delete next;
}

template &lt;class T&gt;
Node&lt;T&gt;* Root&lt;T&gt;::Append(T *data) {
	next-&gt;Append(data);
	return next;
}

#endif
</code></pre>
<p>TreeNode.h</p>
<pre><code class="language-cpp">#ifndef TREENODE_H
#define TREENODE_H
#include &quot;Node.h&quot;

template &lt;class T&gt;
class TreeNode : public Node&lt;T&gt; {

private:
	Node&lt;T&gt; *next;
	Node&lt;T&gt; *prev;
	T *data;

public:
	TreeNode(Node&lt;T&gt;*);
	~TreeNode();
	Node&lt;T&gt;* Append(T*);
};

// Definitionen

template &lt;class T&gt;
TreeNode&lt;T&gt;::TreeNode(Node&lt;T&gt; *prev) {
	this-&gt;prev = prev;
}

template &lt;class T&gt;
TreeNode&lt;T&gt;::~TreeNode() {
	delete next;
}

template &lt;class T&gt;
Node&lt;T&gt;* TreeNode&lt;T&gt;::Append(T *data) {
	if(this-&gt;data == NULL) {
		this-&gt;data = data;
		next = new TreeNode&lt;T&gt;(this);
	}
	else
		next-&gt;Append(data);
	return this;
}

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1713439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713439</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 20 May 2009 17:14:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 18:13:48 GMT]]></title><description><![CDATA[<p>insufficient information - wer kann erraten, was in Client.h und/oder Node.h steht?</p>
<p>Alles in allem sieht's für mich seltsam aus:<br />
was macht denn Append z.B.</p>
<p>Vielleicht solltest du mal einen Gang runterschalten und es ohne templates versuchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713482</guid><dc:creator><![CDATA[EOP]]></dc:creator><pubDate>Wed, 20 May 2009 18:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 18:45:34 GMT]]></title><description><![CDATA[<p>Client.h ist ein einfache Container, der für die Liste als Template dient, aber ich kann genausogut auch int nehmen.<br />
Node.h beherbergt eine abstrakte Klasse, TreeNode und Root erben von ihr, nichts besonders.<br />
Append funktioniert so:</p>
<p>BinTree gibt es einfach an Root weiter. Root darf/soll/kann keine Daten aufnhemen (ist ja nur die Wurzel) Next zeigt auf ein neues Element (TreeNode). TreeNode prüft, ob der Inhalt (data) ein NULLZeiger ist oder nicht. Wenn ja, dann fülle mit der Adresse von T (also Klasse &quot;Client&quot;), und lasse next auf einen neuen TreeNode zeigen. Wenn es kein Nullzeiger ist, dann überlass Anfügen dem next.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713499</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 20 May 2009 18:45:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 18:55:13 GMT]]></title><description><![CDATA[<p>Schau doch mal mit dem Debugger, wo das Programm genau abstürtzt..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713504</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 20 May 2009 18:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 19:07:46 GMT]]></title><description><![CDATA[<p>Ad aCTa schrieb:</p>
<blockquote>
<p>Bei dem Code stürzt das Programm ab, wieso?</p>
</blockquote>
<p>weil irgendwo ein fehler ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713508</guid><dc:creator><![CDATA[ganz einfach]]></dc:creator><pubDate>Wed, 20 May 2009 19:07:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 19:08:47 GMT]]></title><description><![CDATA[<p>Naja, ich kann im Konstruktor von BinTree faktisch alles löschen und es kommt trotzdem zum Absturz.</p>
<p>Unbehandelte Ausnahme bei 0x0040124d in BinTree.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xbaadf00d.</p>
<p>Ich muss irgendwas mit den Zeigern verwurschtelt haben.</p>
<p>Der Fehler passiert nicht, wenn ich die Kurzform des Konstruktor-Aufrufes verwende:</p>
<pre><code class="language-cpp">BinTree&lt;Client&gt; b1();
// statt
BinTree&lt;Client&gt; b1 = BinTree&lt;Client&gt;();
</code></pre>
<p>Aber dann mit der Warnung:</p>
<p>Warnung 1 warning C4930: 'BinTree&lt;T&gt; b1(void)': Funktion mit Prototyp wurde nicht aufgerufen (war eine Variablendefinition gemeint?) c:\Dokumente und Einstellungen\Ad aCTa\Desktop\C++\BinTree\BinTree\main.cpp 8</p>
<p>Hä? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713509</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 20 May 2009 19:08:47 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 19:12:55 GMT]]></title><description><![CDATA[<p>Das sind ja auch zwei verschiedene Dinge.</p>
<pre><code class="language-cpp">BinTree&lt;Client&gt; b1();
</code></pre>
<p>deklariert eine Funktion namens b1 ohne Parameter welche ein BinTree&lt;Client&gt; Objekt zurückgibt. Das sagt auch die Warnung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713511</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 20 May 2009 19:12:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 19:18:18 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">BinTree&lt;Client&gt; b1();
</code></pre>
<p>sieht doch verdammt nach :</p>
<pre><code class="language-cpp">int foo ();
</code></pre>
<p>aus, nicht? Klingelts?</p>
<p>Zu dem Fehler. Debug die Applikation einfach mal und geh alle Konstruktoren durch. (Das ist ja das einzige, was du überhaupt machst). Dann siehst du genau, wo der Fehler liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713513</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 20 May 2009 19:18:18 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 19:24:30 GMT]]></title><description><![CDATA[<p>Tja und jetzt?</p>
<p>Ich kann zum Verständis sagen, was ich von dem Code will: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Wenn der Konstruktor von BinTree aufgerufen wird, soll in BinTree::root ein Zeiger eines neu erstellten Root-Objektes gespeichert werden.</p>
<pre><code class="language-cpp">root = new Root&lt;T&gt;();
</code></pre>
<p>Wird der Root-Konstruktor dadurch wiederrum aufgerufen, so soll dieser in Root::next eine Adresse eines neu erzeugten TreeNode-Objekts speichern, dabei übergibt er seine eigene Adresse an TreeNode.</p>
<pre><code class="language-cpp">next = new TreeNode&lt;T&gt;(this);
</code></pre>
<p>Dieses Objekt schreibt in seinem Konstrukor die Adresse wiederrum in seinen prev-Zeiger, der next von TreeNode wird erst befüllt, wenn Append aktiviert wird.</p>
<pre><code class="language-cpp">this-&gt;prev = prev // Parameter des Konstruktors
</code></pre>
<p>Ich habe cout-Ausgaben überall in jedem Konstruktor erfolgreich ausführen können, wie gesagt, das Programm stürzt immer ab, egal, ob was im Konstruktor von BinTree steht. Damit ist der Fehler ja irgendwo dort, bloß wo?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713514</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 20 May 2009 19:24:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 19:33:38 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich habe cout-Ausgaben überall in jedem Konstruktor erfolgreich ausführen können, wie gesagt, das Programm stürzt immer ab, egal, ob was im Konstruktor von BinTree steht. Damit ist der Fehler ja irgendwo dort, bloß wo?</p>
</blockquote>
<p>Wie viel mal muss ich es noch sagen:<br />
<strong>Schalte den Debugger an und geh einfach von Anfang an jeden Schritt durch.. Dann wirst du früher oder später den Fehler kriegen.. Und dann weisst du auch, wo der ist..</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713518</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 20 May 2009 19:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 19:54:01 GMT]]></title><description><![CDATA[<p>Der Fehler lag im Destruktor von BinTree, ich weiß nur nicht, was der Compiler gegen delete root; hat! Ohne das ist mein Programm ein riesiges Speicherleck, wieso will der Compiler das nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713534</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 20 May 2009 19:54:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 20:00:46 GMT]]></title><description><![CDATA[<p>Ganz einfach. Du erzeugst ja 2 Objekte vom Typ BinTree. Im ctor wird da Speicher angefordert und in root gespeichert. Das ist gut so. Dann kommt aber das Problem, dass du keinen Zuweisungsoperator definiert hast und daher erzeugt dir dein Compiler einen. Nur der weiss nicht, was du da für Variablen hast, respektive wer die Verwantwortung für den Speicher hat usw. Also kopiert er einfach alles 1:1. Sprich du hast 2 Objekte vom Typ BinTree und beide beinhalten einen Zeiger auf denselben Speicherbereich. Der erste zerstört den Bereich und der zweite probiert dasselbe und das ist undefiniert, respektive ergibt meist einen Laufzeitfehler.</p>
<p>Daher gilt die Regel, dass du, wenn du deinen der Konstruktoren definierst, die anderen ebenfalls definierst.</p>
<p>Hier findest du auch, wie man das richtig macht:<br />
<a href="http://tutorial.schornboeck.net/bigthree.htm" rel="nofollow">http://tutorial.schornboeck.net/bigthree.htm</a></p>
<p>btw:<br />
Der Compiler hat mit dem schon lange nichts mehr zu tun. Sobald eine exe da ist, ist der Compiler unbeteiligt..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713537</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 20 May 2009 20:00:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso stürzt das Programm ab? on Wed, 20 May 2009 20:23:18 GMT]]></title><description><![CDATA[<p>Oh gott, darauf muss man erst mal kommen, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713542</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 20 May 2009 20:23:18 GMT</pubDate></item></channel></rss>