<?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>habe ein rekursives program geschrieben das soweit auch funzt solange die rekursion nicht zu tief geht. bei knapp über 3000 rekusiven aufrufen bekomme ich aber folgenden fehler:</p>
<pre><code>Unbehandelte Ausnahme bei 0x004141d7 in TableModelTest.exe: 0xC00000FD: Stack overflow.
</code></pre>
<p>ich meine, dass das irgendwann passiert war mir klar aber bei 3000 schon? habe zum testen dann einfach mal folgendes mini-prog geschrieben:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

using namespace std;

void stackTest(int k){
	stackTest(k+1);
}

int main(void){

	stackTest(0);

}
</code></pre>
<p>auch das schmiert schon bei k=4795 ab!</p>
<p>kann ich den stack irgendwie vergrößern?</p>
<p>habe es schon mit</p>
<pre><code>#pragma check_stack off
</code></pre>
<p>und</p>
<pre><code>/Gs[size]
</code></pre>
<p>versucht, hat aber beides nichts gebracht.<br />
ich benutze Visual Studio 2005.<br />
irgendwer eine idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/167047/stack-overflow</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 17:14:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/167047.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Dec 2006 00:07:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 00:08:40 GMT]]></title><description><![CDATA[<p>habe ein rekursives program geschrieben das soweit auch funzt solange die rekursion nicht zu tief geht. bei knapp über 3000 rekusiven aufrufen bekomme ich aber folgenden fehler:</p>
<pre><code>Unbehandelte Ausnahme bei 0x004141d7 in TableModelTest.exe: 0xC00000FD: Stack overflow.
</code></pre>
<p>ich meine, dass das irgendwann passiert war mir klar aber bei 3000 schon? habe zum testen dann einfach mal folgendes mini-prog geschrieben:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

using namespace std;

void stackTest(int k){
	stackTest(k+1);
}

int main(void){

	stackTest(0);

}
</code></pre>
<p>auch das schmiert schon bei k=4795 ab!</p>
<p>kann ich den stack irgendwie vergrößern?</p>
<p>habe es schon mit</p>
<pre><code>#pragma check_stack off
</code></pre>
<p>und</p>
<pre><code>/Gs[size]
</code></pre>
<p>versucht, hat aber beides nichts gebracht.<br />
ich benutze Visual Studio 2005.<br />
irgendwer eine idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187621</guid><dc:creator><![CDATA[snuuts]]></dc:creator><pubDate>Wed, 06 Dec 2006 00:08:40 GMT</pubDate></item><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 00:41:18 GMT]]></title><description><![CDATA[<p>snuuts schrieb:</p>
<blockquote>
<p>auch das schmiert schon bei k=4795 ab!</p>
</blockquote>
<p>Wen willst du eigentlich reinlegen?<br />
Das Programm kackt bei jedem Wert ab...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187622</guid><dc:creator><![CDATA[TrollDetector]]></dc:creator><pubDate>Wed, 06 Dec 2006 00:41:18 GMT</pubDate></item><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 00:57:23 GMT]]></title><description><![CDATA[<p>jo, das soll ja auch abschmieren! ich habe das ledicglich zum testen geschrieben um zu sehen, dass ich in meinem eigentlichen programm nicht irgendeinen datenmüll mit mir rumschleppe der den stack zuballert. das program schmiert bei mir schon in der 4795 iteration ab! ich habe halt das problem, dass ich SEHR SCHNELL einen stack-overflow kriege! Dass ich den irgendwann habe ist mir klar. mir geht es darum zu wissen wie ich den zeitpunkt hinauszögern , sprich den stack vergrößern kann!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187623</guid><dc:creator><![CDATA[snuuts]]></dc:creator><pubDate>Wed, 06 Dec 2006 00:57:23 GMT</pubDate></item><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 01:52:47 GMT]]></title><description><![CDATA[<p>Irgendwie sieht das nach dem falschen Lösungsweg aus.</p>
<p>Warum willst Du denn den Stack vergrößern ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187628</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Wed, 06 Dec 2006 01:52:47 GMT</pubDate></item><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 02:03:39 GMT]]></title><description><![CDATA[<p>Windows erhöht den Stack on demand auf bis zu 1 MB</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187630</guid><dc:creator><![CDATA[TrollDetector]]></dc:creator><pubDate>Wed, 06 Dec 2006 02:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 02:06:58 GMT]]></title><description><![CDATA[<p>Ok. Hab das jetzt selbst probiert. Debug Mode: 4795.<br />
Release Mode schmiert garnicht ab, weil der nette VC das zu ner Schleife weg-optimiert.</p>
<p>Also was anderes testen:</p>
<pre><code class="language-cpp">int g_lala = 0;

int ReCursed(int rek, int blubb)
{
//	int lala = ::GetTickCount();
	g_lala = rek;
	if(rek)
		return ReCursed(rek + 1, blubb * rek) - blubb;
	else
		return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	if(::GetTickCount() == 0)
		ReCursed(::GetTickCount(), 1);
	else
		ReCursed(1, 1);

	printf(&quot;(%d)\n&quot;, g_lala);
	return 0;
}
</code></pre>
<p>Das schmiert nu wieder ab, und zwar in Tiefe 65273. Blubb. 1MB / 65273 = 16,064... - also braucht die Funktion 16 Byte Stack. Tolle Wurst, nicht grad viel zu viel. Also alles ganz normal. Du musst bloss richtig testen...</p>
<p>Im Debug Mode wirds wohl deswegen früher schluss sein, weil der VC da so viel Sachen dazumacht, so Guard-Bytes etc.<br />
OK, ~218 Byte für eine doofe Funktion die eigentlich nix tut ist schon heftig, aber dann auch wieder egal -- wer nestet schon 4000 Levels tief?</p>
<p>EDIT<br />
@TrollDetector:<br />
Windows reserviert eine bestimmte Menge Adressraum für den Stack, und zwar sofort wenn der Thread angelegt wird. Default ist 1MB ja, aber wenn man 100MB Stack haben will oder bloss 100K, dann geht das auch. Und Windows kann auch nicht zaubern wenn man bloss 100K einstellt, dann bleiben es 100K, ganz egal ob man mehr brauchen würde <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187631</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 06 Dec 2006 02:06:58 GMT</pubDate></item><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 02:05:11 GMT]]></title><description><![CDATA[<p>also, habe den algorithmus x von donald knuth mithilfe der dancing links implementiert um exact cover probleme zu lösen. Dieser algorithmus ist hier (<a href="http://xxx.lanl.gov/PS_cache/cs/pdf/0011/0011047.pdf" rel="nofollow">http://xxx.lanl.gov/PS_cache/cs/pdf/0011/0011047.pdf</a>) genauer erläutert. Leider erzeuge ich aber sehr große matrizen, so dass der algorithmus ziemlich excessives backtracking betreibt und für große matrizen bekomme ich halt irgendwann einen stack-overflow. ich denke auch nicht, dass sich dieser algorithmus einfach so durch einen iterativen algorithmus ersetzen lässt (wenn doch, immer her damit <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="😉"
    /> ) und fürchte daher, dass eine vergrößerung des stacks der einzige weg ist. falls jemanden eine bessere möglichkeit einfällt habe ich natürlich auch nichts dagegen ;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187632</guid><dc:creator><![CDATA[snuuts]]></dc:creator><pubDate>Wed, 06 Dec 2006 02:05:11 GMT</pubDate></item><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 02:07:24 GMT]]></title><description><![CDATA[<p>meine fresse um die zeit soviele antworten, geht ihr nie pennen ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187633</guid><dc:creator><![CDATA[snuuts]]></dc:creator><pubDate>Wed, 06 Dec 2006 02:07:24 GMT</pubDate></item><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 02:13:18 GMT]]></title><description><![CDATA[<p>Du kannst die &quot;Basic Runtime Checks&quot; im Debug Modus auf &quot;Default&quot; schalten. Im Release sind die sowieso normal nicht ein.</p>
<p>Im Debug kannst du dann ja einfach mal 10MB Stack (oder mehr) einstellen. Wenn dir das Programm im Release auch abschmiert, dann kannst du ja evtl. im Release auch mehr Stack hergeben.</p>
<p>Oder du implementierst selbst einen &quot;Stack&quot; wo du deinen State drauflegst, und wastelst die Funktion um dass sie ne Schleife verwendet, und das Backtracking eben selbst die nötigen Daten von dem &quot;manuellen Stack&quot; runterklaubt. Dann kannst du genau kontrollieren wieviel Speicher du pro &quot;Frame&quot; brauchst, und vor allem landet es nichtmehr am Stack, sondern eben im normalen Speicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187634</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 06 Dec 2006 02:13:18 GMT</pubDate></item><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 03:48:36 GMT]]></title><description><![CDATA[<p>@hustbär:<br />
Schon klar, dass man auch mehr bei der Initialisierung beantragen kann...</p>
<p>Aber für den main-Thread geht das doch nciht, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187639</guid><dc:creator><![CDATA[TrollDetector]]></dc:creator><pubDate>Wed, 06 Dec 2006 03:48:36 GMT</pubDate></item><item><title><![CDATA[Reply to stack overflow on Wed, 06 Dec 2006 05:17:56 GMT]]></title><description><![CDATA[<p>Woll geht, muss nur im PE Image entsprechend eingetragen sein. Ist ne Linkeroption. Kannste im Studio umstellen (&quot;Linker&quot;-&gt;&quot;System&quot;-&gt;&quot;Stack Reserve Size&quot; und &quot;Stack Commit Size&quot;). Oder halt in der Commandline mit &quot;/STACK:reserve,commit&quot;.<br />
Wäre ja auch doof wenn das nicht ginge <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="😉"
    /><br />
p.S.: interessant ist natürlich hauptsächlich &quot;reserve&quot;, weil man will ja nicht gleich 10 oder 100MB committen für den Stack - das wäre Verschwändung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187648</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 06 Dec 2006 05:17:56 GMT</pubDate></item></channel></rss>