<?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[Stack Overflow]]></title><description><![CDATA[<p>Hey,<br />
ich habe fogendes Problem und zwar versuche ich so eine Art Minesweeper für die Konsole zu programmieren.<br />
Wenn der Anwender ein Feld aufdeckt, um das herum keine Mine ist, möchte ich aber keine 0 ausgeben, sondern einen ganzen Bereich aufdecken, wie bei Minesweeper eben.</p>
<p>Leider fuktioniert meine dafür verwendete Rekursion nicht. Bei der Ausführung gibt es einen Stack Overflow. Ich verstehe nur nicht ganz warum. Wiederholt sich die Rekursion etwa unendlich mal, sodass irgendwann der Stack voll ist?</p>
<pre><code class="language-cpp">void System::ausbreitung(const int &amp;y, const int &amp;x)
{
	if(im_Wertebereich(y,x))
	{
		int zahl=0;
		for(int i = -1;i &lt; 2;i++)
		{
			for(int j = -1;j &lt; 2;j++)
			{
				if(im_Wertebereich(y+i,x+j))
				{
					zahl = zaehleMine(y+i,x+j);

					if(zahl == 0)
					{
						koordinatensystem[y+i][x+j] = ' ';
						ausbreitung(y+i,x+j);
					}
					else
					{
						koordinatensystem[y+i][x+j] = (char)('0' + zahl);
					}
				}
			}
		}
	}
}
</code></pre>
<p>Die Memberfunktion im_Wertebereich sieht folgendermaßen aus:</p>
<pre><code class="language-cpp">bool System::im_Wertebereich(const int &amp;y, const int &amp;x)
{
	if(y &lt; MAXY &amp;&amp; x &lt; MAXX &amp;&amp; y &gt;= 0 &amp;&amp; x &gt;= 0)
		return true;
	else
		return false;
}
</code></pre>
<p>MAXY hat den Wert 8 ebenso wie MAXX</p>
<p>Und zaehleMine:</p>
<pre><code class="language-cpp">int System::zaehleMine(const int &amp;y, const int &amp;x)
{
	int Zahl = 0;

	for(int i=(-1);i&lt;2;i++)
	{
		for(int j=(-1);j&lt;2;j++)
		{
			if(!im_Wertebereich(y+i,x+j))
			{
				continue;
			}

			if(Mine.istMine(y+i,x+j))
			{
				Zahl += 1;
			}
		}
	}
	return Zahl;
}
</code></pre>
<p>Im Voraus schon mal vielen Dank für eure Hilfe<br />
Sagara</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279283/stack-overflow</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 16:24:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279283.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 22 Dec 2010 18:58:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 18:58:13 GMT]]></title><description><![CDATA[<p>Hey,<br />
ich habe fogendes Problem und zwar versuche ich so eine Art Minesweeper für die Konsole zu programmieren.<br />
Wenn der Anwender ein Feld aufdeckt, um das herum keine Mine ist, möchte ich aber keine 0 ausgeben, sondern einen ganzen Bereich aufdecken, wie bei Minesweeper eben.</p>
<p>Leider fuktioniert meine dafür verwendete Rekursion nicht. Bei der Ausführung gibt es einen Stack Overflow. Ich verstehe nur nicht ganz warum. Wiederholt sich die Rekursion etwa unendlich mal, sodass irgendwann der Stack voll ist?</p>
<pre><code class="language-cpp">void System::ausbreitung(const int &amp;y, const int &amp;x)
{
	if(im_Wertebereich(y,x))
	{
		int zahl=0;
		for(int i = -1;i &lt; 2;i++)
		{
			for(int j = -1;j &lt; 2;j++)
			{
				if(im_Wertebereich(y+i,x+j))
				{
					zahl = zaehleMine(y+i,x+j);

					if(zahl == 0)
					{
						koordinatensystem[y+i][x+j] = ' ';
						ausbreitung(y+i,x+j);
					}
					else
					{
						koordinatensystem[y+i][x+j] = (char)('0' + zahl);
					}
				}
			}
		}
	}
}
</code></pre>
<p>Die Memberfunktion im_Wertebereich sieht folgendermaßen aus:</p>
<pre><code class="language-cpp">bool System::im_Wertebereich(const int &amp;y, const int &amp;x)
{
	if(y &lt; MAXY &amp;&amp; x &lt; MAXX &amp;&amp; y &gt;= 0 &amp;&amp; x &gt;= 0)
		return true;
	else
		return false;
}
</code></pre>
<p>MAXY hat den Wert 8 ebenso wie MAXX</p>
<p>Und zaehleMine:</p>
<pre><code class="language-cpp">int System::zaehleMine(const int &amp;y, const int &amp;x)
{
	int Zahl = 0;

	for(int i=(-1);i&lt;2;i++)
	{
		for(int j=(-1);j&lt;2;j++)
		{
			if(!im_Wertebereich(y+i,x+j))
			{
				continue;
			}

			if(Mine.istMine(y+i,x+j))
			{
				Zahl += 1;
			}
		}
	}
	return Zahl;
}
</code></pre>
<p>Im Voraus schon mal vielen Dank für eure Hilfe<br />
Sagara</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998034</guid><dc:creator><![CDATA[Sagara]]></dc:creator><pubDate>Wed, 22 Dec 2010 18:58:13 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 19:04:30 GMT]]></title><description><![CDATA[<p>Gibt es einen für die Rekursion statischen Fall, in dem zahl, x und y == 0 ist?<br />
Dann wäre ausbreitung(y+i,x+j) ein Problem...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998037</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 22 Dec 2010 19:04:30 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 19:13:07 GMT]]></title><description><![CDATA[<p>Der Fall tritt nur ein, wenn der Anwender für x und y 0 eingibt, sonst nicht.<br />
Zum Stack Overflow kommt es aber auch, wenn man z.B. für y == 5 und x == 3 eingibt.</p>
<p>Decimad schrieb:</p>
<blockquote>
<p>Gibt es einen für die Rekursion statischen Fall, in dem zahl, x und y == 0 ist?<br />
Dann wäre ausbreitung(y+i,x+j) ein Problem...</p>
</blockquote>
<p>Wieso wäre das denn ein Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998043</guid><dc:creator><![CDATA[Sagara]]></dc:creator><pubDate>Wed, 22 Dec 2010 19:13:07 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 19:20:41 GMT]]></title><description><![CDATA[<p>Na weil ein Aufruf von ausbreitung(0,0) dann ausbreitung(0,0) aufruft. Das sieht für mich auf den ersten Blick ziemlich endlos aus.<br />
So, jetzt habe ich mir den Algorithmus nochmal genauer angeschaut:<br />
Ausgehend von der Benutzereingabe, deckt ausbreitung das Feld und alle umliegenden auf. Soweit so gut. Für die umliegenden Felder ruft ausbreitung dafür sich selber auf. Nur wissen die aufgerufenen &quot;ausbreitungs&quot; ja nicht, welche Zellen schon besucht waren (Und brechen auch nirgendwo ab). Ich stelle mir hier gerade unendlich viele Wellen vor, die durch dein Array laufen <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="😃"
    /><br />
Wenn du ausbreitung nur für solche Felder aufrufen würdest, die noch nicht aufgedeckt sind, dann würde das funktionieren!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998046</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 22 Dec 2010 19:20:41 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 20:14:06 GMT]]></title><description><![CDATA[<p>Ich habe gerade mal ausprobiert was passiert, wenn ich ausbreitung(o,o) ausführe.</p>
<pre><code class="language-cpp">ausbreitung(y+i,x+j);    //y==0,x==0   i==-1,j==-1
                              //komischerweise bleiben y und x == 0
</code></pre>
<p>Wieso wird denn die Rechnung nicht durchgeführt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998061</guid><dc:creator><![CDATA[Sagara]]></dc:creator><pubDate>Wed, 22 Dec 2010 20:14:06 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 20:12:15 GMT]]></title><description><![CDATA[<p>Die Werte werden ja nur darauf überprüft, ob sie noch im Spielfeld liegen, nicht ob die Rekursion dort schon einmal war.<br />
Sagen wir mal, ausbreitung(0,0) wurde aufgerufen und ruft jetzt ausbreitung(1,1) auf. Nun ruft ausbreitung(1,1) ja irgendwann wieder ausbreitung(0,0) auf, welches irgendwann wieder ausbreitung(1,1) aufrufen wird und endlos so weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998067</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 22 Dec 2010 20:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 20:15:37 GMT]]></title><description><![CDATA[<p>Sagara schrieb:</p>
<blockquote>
<p>Ich habe gerade mal ausprobiert was passiert, wenn ich ausbreitung(o,o) ausführe.</p>
<p>Wieso wird denn die Rechnung nicht durchgeführt?</p>
</blockquote>
<p>Die Rechnung wird ausgeführt, nur wird das Ergebnis ja nicht in x respektive y gespeichert (nirgendwo ein zuweisungsoperator zu finden, oder?).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998069</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 22 Dec 2010 20:15:37 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 20:18:44 GMT]]></title><description><![CDATA[<p>Jetzt verstehe ich was du meintest.</p>
<p>Vielen Dank für deine Bemühungen <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="🙂"
    /><br />
Ich hoffe ich kann das Probelem mit diesen Infos lösen</p>
<p>Viele Grüße<br />
Sagara</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998071</guid><dc:creator><![CDATA[Sagara]]></dc:creator><pubDate>Wed, 22 Dec 2010 20:18:44 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 20:18:15 GMT]]></title><description><![CDATA[<p>Na was hast du denn jetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998072</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 22 Dec 2010 20:18:15 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 20:20:10 GMT]]></title><description><![CDATA[<p>Sorry hatte ausversehen den Beitrag editiert, anstatt einen neuen zu schreiben...<br />
bin halt noch neu<br />
Frohe Weihnachten :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998074</guid><dc:creator><![CDATA[Sagara]]></dc:creator><pubDate>Wed, 22 Dec 2010 20:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to Stack Overflow on Wed, 22 Dec 2010 20:29:37 GMT]]></title><description><![CDATA[<p>Nee, ich wollte deinen aktuellen Code sehen, der nichts tut...^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1998082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1998082</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 22 Dec 2010 20:29:37 GMT</pubDate></item></channel></rss>