<?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[Abstürze und Endlosschleifen ohne Schleifen]]></title><description><![CDATA[<p>Hi</p>
<p>ich hab hier ein ganz komisches Verhalten was ich nicht verstehe: Ich habe 3 Klassen: &quot;MainMenu&quot;, &quot;ScrollableList&quot; und &quot;ScrollableListElement&quot;. In der Klasse &quot;MainMenu&quot; gibt es die Methode add_menu() in der ich 10 &quot;ScrollableListElement&quot;e erstelle, diese in einer &quot;ScrollableList&quot; speichere, und diese ScrollableList dann in meinem MainMenu ablege. Kurze Warnung vorweg, es ist alles sehr hackig und ich hab nicht mal getter/setter benutzt, das liegt daran dass ich das Menü nur rendern soll, die generierung macht ein Kommolitone, und das generieren hier ist nur schnell hingepanscht damit ich was habe womit ich arbeiten kann.</p>
<p>Also, MainMenu.h (auszug):</p>
<pre><code class="language-cpp">class MainMenu : public Controllable, public GuiObject {

private:
	static std::list&lt;ScrollableList&gt; menu_list;
public:
	void add_menu();

	void render_to_screen(int pos_x=0, int pos_y=0);
// [...]
</code></pre>
<p>MainMenu.cpp</p>
<pre><code class="language-cpp">void MainMenu::add_menu() {		// Implementation nur zu testzwecken

	ScrollableListElement *elementenliste[10];
	std::string elementlabel;

	for(int i=0; i&lt;10; i++) {
		elementlabel = &quot;Element &quot;;
		elementlabel += i;

		// Der ScrollableListElement-Konstruktor erwartet einen String 
		// und speichert diesen einfach ab:
		elementenliste[i] = new ScrollableListElement(elementlabel);
	}

	// Mehr zu ScrollableList.cpp weiter unten. Prinzipiell hat es nur
	// ein Array von ScrollableListElementen und die Anzahl der Elem.
	ScrollableList *neueliste = new ScrollableList();
	neueliste-&gt;num_list_elements = 10;
	neueliste-&gt;list_elements = elementenliste;

	this-&gt;menu_list.push_back(*neueliste);
}
</code></pre>
<p>ScrollableList.h:</p>
<pre><code class="language-cpp">class ScrollableList : public Controllable, public GuiObject {

private:
	// [...]

public:
	// zu testzwecken public und so
	ScrollableListElement **list_elements;
	int num_list_elements;

	// [...]

	void render_to_screen(int pos_x=0, int pos_y=0);
};
</code></pre>
<p>Da sind ja jetzt noch die render_to_screen-funktionen, und das ist wo ich auf die Probleme stoße (die wahrscheinlich durch die generierung kommen), die sehen wie folgt aus:</p>
<p>MainMenu.cpp:</p>
<pre><code class="language-cpp">void MainMenu::render_to_screen(int pos_x, int pos_y)
{
	std::list&lt;ScrollableList&gt;::iterator i;

	for(i=menu_list.begin(); i != menu_list.end(); ++i)
		i-&gt;render_to_screen(0,0);
}
</code></pre>
<p>ScrollableList.cpp:</p>
<pre><code class="language-cpp">void ScrollableList::render_to_screen(int pos_x, int pos_y)
{
	for(int i=0; i&lt;num_list_elements; i++) {
			list_elements[i]-&gt;render_to_screen(0, 0);
	}
}
</code></pre>
<p>Und ScrollableListElement.cpp hat auch eine render_to_screen die zu debugzwecken aber einfach nur einen text ausgibt:</p>
<pre><code class="language-cpp">void ScrollableListElement::render_to_screen(int pos_x, int pos_y)
{
	printf(&quot;Listenelement &quot;);
}
</code></pre>
<p>So stürzt das Programm einfach ab. Jetzt kommt der freakige Teil:<br />
Wenn ich die Schleife ScrollableList.cpp auf &lt;2 begrenze geht's, darüber stürzt es ab. Wenn ich keine Schleife benutze, sondern einfach so durchgehe:</p>
<pre><code class="language-cpp">list_elements[0]-&gt;render_to_screen(0, 0);
	list_elements[1]-&gt;render_to_screen(0, 0);
	list_elements[2]-&gt;render_to_screen(0, 0);
	list_elements[3]-&gt;render_to_screen(0, 0);
</code></pre>
<p>geht es auch wenn ich über das [1]e Element hinausgehe. Wenn ich aber über das [3]e Element zugreife spuckt er mir in einer Endlosschleife &quot;Listenelement&quot; (wie in ScrollableListElement.cpp auf den Bildschirm! Und ab dem Zugriff auf das [5]e Element stürzt er einfach wieder ab!</p>
<p>Für mich total freaky, nehme an irgendwas wird da beim generieren im speicher verhunzt oder so, weiß aber einfach nicht was.</p>
<p>Grüße<br />
Lukas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/231300/abstürze-und-endlosschleifen-ohne-schleifen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 22:29:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231300.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Jan 2009 15:06:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Abstürze und Endlosschleifen ohne Schleifen on Thu, 08 Jan 2009 15:06:45 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>ich hab hier ein ganz komisches Verhalten was ich nicht verstehe: Ich habe 3 Klassen: &quot;MainMenu&quot;, &quot;ScrollableList&quot; und &quot;ScrollableListElement&quot;. In der Klasse &quot;MainMenu&quot; gibt es die Methode add_menu() in der ich 10 &quot;ScrollableListElement&quot;e erstelle, diese in einer &quot;ScrollableList&quot; speichere, und diese ScrollableList dann in meinem MainMenu ablege. Kurze Warnung vorweg, es ist alles sehr hackig und ich hab nicht mal getter/setter benutzt, das liegt daran dass ich das Menü nur rendern soll, die generierung macht ein Kommolitone, und das generieren hier ist nur schnell hingepanscht damit ich was habe womit ich arbeiten kann.</p>
<p>Also, MainMenu.h (auszug):</p>
<pre><code class="language-cpp">class MainMenu : public Controllable, public GuiObject {

private:
	static std::list&lt;ScrollableList&gt; menu_list;
public:
	void add_menu();

	void render_to_screen(int pos_x=0, int pos_y=0);
// [...]
</code></pre>
<p>MainMenu.cpp</p>
<pre><code class="language-cpp">void MainMenu::add_menu() {		// Implementation nur zu testzwecken

	ScrollableListElement *elementenliste[10];
	std::string elementlabel;

	for(int i=0; i&lt;10; i++) {
		elementlabel = &quot;Element &quot;;
		elementlabel += i;

		// Der ScrollableListElement-Konstruktor erwartet einen String 
		// und speichert diesen einfach ab:
		elementenliste[i] = new ScrollableListElement(elementlabel);
	}

	// Mehr zu ScrollableList.cpp weiter unten. Prinzipiell hat es nur
	// ein Array von ScrollableListElementen und die Anzahl der Elem.
	ScrollableList *neueliste = new ScrollableList();
	neueliste-&gt;num_list_elements = 10;
	neueliste-&gt;list_elements = elementenliste;

	this-&gt;menu_list.push_back(*neueliste);
}
</code></pre>
<p>ScrollableList.h:</p>
<pre><code class="language-cpp">class ScrollableList : public Controllable, public GuiObject {

private:
	// [...]

public:
	// zu testzwecken public und so
	ScrollableListElement **list_elements;
	int num_list_elements;

	// [...]

	void render_to_screen(int pos_x=0, int pos_y=0);
};
</code></pre>
<p>Da sind ja jetzt noch die render_to_screen-funktionen, und das ist wo ich auf die Probleme stoße (die wahrscheinlich durch die generierung kommen), die sehen wie folgt aus:</p>
<p>MainMenu.cpp:</p>
<pre><code class="language-cpp">void MainMenu::render_to_screen(int pos_x, int pos_y)
{
	std::list&lt;ScrollableList&gt;::iterator i;

	for(i=menu_list.begin(); i != menu_list.end(); ++i)
		i-&gt;render_to_screen(0,0);
}
</code></pre>
<p>ScrollableList.cpp:</p>
<pre><code class="language-cpp">void ScrollableList::render_to_screen(int pos_x, int pos_y)
{
	for(int i=0; i&lt;num_list_elements; i++) {
			list_elements[i]-&gt;render_to_screen(0, 0);
	}
}
</code></pre>
<p>Und ScrollableListElement.cpp hat auch eine render_to_screen die zu debugzwecken aber einfach nur einen text ausgibt:</p>
<pre><code class="language-cpp">void ScrollableListElement::render_to_screen(int pos_x, int pos_y)
{
	printf(&quot;Listenelement &quot;);
}
</code></pre>
<p>So stürzt das Programm einfach ab. Jetzt kommt der freakige Teil:<br />
Wenn ich die Schleife ScrollableList.cpp auf &lt;2 begrenze geht's, darüber stürzt es ab. Wenn ich keine Schleife benutze, sondern einfach so durchgehe:</p>
<pre><code class="language-cpp">list_elements[0]-&gt;render_to_screen(0, 0);
	list_elements[1]-&gt;render_to_screen(0, 0);
	list_elements[2]-&gt;render_to_screen(0, 0);
	list_elements[3]-&gt;render_to_screen(0, 0);
</code></pre>
<p>geht es auch wenn ich über das [1]e Element hinausgehe. Wenn ich aber über das [3]e Element zugreife spuckt er mir in einer Endlosschleife &quot;Listenelement&quot; (wie in ScrollableListElement.cpp auf den Bildschirm! Und ab dem Zugriff auf das [5]e Element stürzt er einfach wieder ab!</p>
<p>Für mich total freaky, nehme an irgendwas wird da beim generieren im speicher verhunzt oder so, weiß aber einfach nicht was.</p>
<p>Grüße<br />
Lukas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641832</guid><dc:creator><![CDATA[Lukas B]]></dc:creator><pubDate>Thu, 08 Jan 2009 15:06:45 GMT</pubDate></item><item><title><![CDATA[Reply to Abstürze und Endlosschleifen ohne Schleifen on Thu, 08 Jan 2009 15:17:49 GMT]]></title><description><![CDATA[<p>Das hatte ich vergessen, in meiner main.cpp ruf ich den kram natürlich auf</p>
<pre><code class="language-cpp">MainMenu *mm = new MainMenu();
	mm-&gt;add_menu();

	printf(&quot;Vortest &quot;);
	mm-&gt;render_to_screen();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1641842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641842</guid><dc:creator><![CDATA[Lukas B]]></dc:creator><pubDate>Thu, 08 Jan 2009 15:17:49 GMT</pubDate></item><item><title><![CDATA[Reply to Abstürze und Endlosschleifen ohne Schleifen on Thu, 08 Jan 2009 15:23:58 GMT]]></title><description><![CDATA[<p>Schon mal mit nem Debugger gearbeitet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641846</guid><dc:creator><![CDATA[ragabagabimba]]></dc:creator><pubDate>Thu, 08 Jan 2009 15:23:58 GMT</pubDate></item><item><title><![CDATA[Reply to Abstürze und Endlosschleifen ohne Schleifen on Thu, 08 Jan 2009 15:24:03 GMT]]></title><description><![CDATA[<p>Hat ScrollableList Destruktor und/oder Zuweisungsoperator?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641847</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 08 Jan 2009 15:24:03 GMT</pubDate></item><item><title><![CDATA[Reply to Abstürze und Endlosschleifen ohne Schleifen on Thu, 08 Jan 2009 15:28:52 GMT]]></title><description><![CDATA[<p>ragabagabimba schrieb:</p>
<blockquote>
<p>Schon mal mit nem Debugger gearbeitet?</p>
</blockquote>
<p>Nein, noch nicht *schäm*. Ist in dem Fall auch was schwieriger, wenn auch möglich weil das ganze ein PSP-Programm ist.</p>
<p>MFK schrieb:</p>
<blockquote>
<p>Hat ScrollableList Destruktor und/oder Zuweisungsoperator?</p>
</blockquote>
<p>Weder noch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641849</guid><dc:creator><![CDATA[Lukas B]]></dc:creator><pubDate>Thu, 08 Jan 2009 15:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to Abstürze und Endlosschleifen ohne Schleifen on Fri, 09 Jan 2009 08:28:04 GMT]]></title><description><![CDATA[<p>Nur so nebenbei:</p>
<pre><code>std::string elementlabel;

    for(int i=0; i&lt;10; i++) {
        elementlabel = &quot;Element &quot;;
        elementlabel += i; // das hier macht nicht das, was Du erwartest!!!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1642240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1642240</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Fri, 09 Jan 2009 08:28:04 GMT</pubDate></item><item><title><![CDATA[Reply to Abstürze und Endlosschleifen ohne Schleifen on Fri, 09 Jan 2009 09:34:07 GMT]]></title><description><![CDATA[<p>Du speicherst in neueliste-&gt;list_elements die Adresse von elementenliste. Das ist aber ein lokales Array in MainMenu::add_menu, die Adresse ist nach Ende dieser Methode nicht mehr gültig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1642273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1642273</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Fri, 09 Jan 2009 09:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to Abstürze und Endlosschleifen ohne Schleifen on Fri, 09 Jan 2009 12:40:59 GMT]]></title><description><![CDATA[<p>jencas schrieb:</p>
<blockquote>
<p>Nur so nebenbei:</p>
<pre><code>std::string elementlabel;

    for(int i=0; i&lt;10; i++) {
        elementlabel = &quot;Element &quot;;
        elementlabel += i; // das hier macht nicht das, was Du erwartest!!!
</code></pre>
</blockquote>
<p>Schade, ich hatte gehofft C++ würde das können</p>
<p>MFK schrieb:</p>
<blockquote>
<p>Du speicherst in neueliste-&gt;list_elements die Adresse von elementenliste. Das ist aber ein lokales Array in MainMenu::add_menu, die Adresse ist nach Ende dieser Methode nicht mehr gültig.</p>
</blockquote>
<p>Ah ja, vielen dank! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1642379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1642379</guid><dc:creator><![CDATA[Lukas B]]></dc:creator><pubDate>Fri, 09 Jan 2009 12:40:59 GMT</pubDate></item></channel></rss>