<?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[0*C00000FD Stack overflow]]></title><description><![CDATA[<p>SERVUS.</p>
<p>ich habe hier ein problem, das ist nicht nachvollziehen kann. es geht dabei um eine funktion, die sich immer wieder von selbst aufruft. ich habe in diese funktion aber auch ein abbruchkriterium eingebaut, so dass irgendwann damit schluss sein sollte. wenn ich das programm dann durchlaufe (das soll im übrigen ein 2D-array daraufhin untersuchen, wie viele zusammenhängende elemente es gibt, die die zahl 2 enthalten), gibt es folgende fehlermeldung:</p>
<blockquote>
<p>unbehandelte ausnahme in GetPixel.exe (NTDLL.DLL): 0xC00000FD: Stack overflow.</p>
</blockquote>
<p>was soll das nun bedeuten? ist das abbruchkriterium nicht gut genug?</p>
<p>VIELEN DANK!<br />
STICK.</p>
<p>hier im anschluss meinen code dazu:</p>
<pre><code class="language-cpp">cPixel **COPY_REF;
...
void main ()
{
...
	MAX[0]=0;
	MAX[1]=1;
	for (i=0;i&lt;DIM[0];i++)
	{
		for (j=0;j&lt;DIM[1];j++)
		{
			if (2 == COPY_REF[i][j].itsRED)
			{
				MAX[0]++;
				COPY_REF[i][j].itsRED = 3;
				NEIGHBOUR (i,j,DIM,MAX);
				max.push_back(MAX[0]);
				MAX[0]=0;
				MAX[1]++;
			}
		}
	}

return 0;
}

void NEIGHBOUR (int i, int j,int DIM[2],double MAX[2])
{
	int k,l;

	for (k=-1;k&lt;2;k++)
	{
		for (l=-1;l&lt;2;l++)
		{
			if (i+k&gt;=0 &amp;&amp; j+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
			{
				if (2 == COPY_REF[i+k][j+l].itsRED)
				{
					COPY_REF[i+k][j+l].itsRED = 3;
					COPY_REF[i+k][j+l].itsLINE = MAX[1];
					MAX[0]++;
					NEIGHBOUR (i+k,j+l,DIM,MAX);
				}
			}
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/151314/0-c00000fd-stack-overflow</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 15:08:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/151314.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Jun 2006 06:46:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Sun, 25 Jun 2006 06:48:13 GMT]]></title><description><![CDATA[<p>SERVUS.</p>
<p>ich habe hier ein problem, das ist nicht nachvollziehen kann. es geht dabei um eine funktion, die sich immer wieder von selbst aufruft. ich habe in diese funktion aber auch ein abbruchkriterium eingebaut, so dass irgendwann damit schluss sein sollte. wenn ich das programm dann durchlaufe (das soll im übrigen ein 2D-array daraufhin untersuchen, wie viele zusammenhängende elemente es gibt, die die zahl 2 enthalten), gibt es folgende fehlermeldung:</p>
<blockquote>
<p>unbehandelte ausnahme in GetPixel.exe (NTDLL.DLL): 0xC00000FD: Stack overflow.</p>
</blockquote>
<p>was soll das nun bedeuten? ist das abbruchkriterium nicht gut genug?</p>
<p>VIELEN DANK!<br />
STICK.</p>
<p>hier im anschluss meinen code dazu:</p>
<pre><code class="language-cpp">cPixel **COPY_REF;
...
void main ()
{
...
	MAX[0]=0;
	MAX[1]=1;
	for (i=0;i&lt;DIM[0];i++)
	{
		for (j=0;j&lt;DIM[1];j++)
		{
			if (2 == COPY_REF[i][j].itsRED)
			{
				MAX[0]++;
				COPY_REF[i][j].itsRED = 3;
				NEIGHBOUR (i,j,DIM,MAX);
				max.push_back(MAX[0]);
				MAX[0]=0;
				MAX[1]++;
			}
		}
	}

return 0;
}

void NEIGHBOUR (int i, int j,int DIM[2],double MAX[2])
{
	int k,l;

	for (k=-1;k&lt;2;k++)
	{
		for (l=-1;l&lt;2;l++)
		{
			if (i+k&gt;=0 &amp;&amp; j+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
			{
				if (2 == COPY_REF[i+k][j+l].itsRED)
				{
					COPY_REF[i+k][j+l].itsRED = 3;
					COPY_REF[i+k][j+l].itsLINE = MAX[1];
					MAX[0]++;
					NEIGHBOUR (i+k,j+l,DIM,MAX);
				}
			}
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1084876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1084876</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Sun, 25 Jun 2006 06:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Sun, 25 Jun 2006 06:52:06 GMT]]></title><description><![CDATA[<p>Offentsichtlich funktioniert dein Abbruchkriterium nicht wie erhofft.</p>
<p>Einfachste Testmöglichkeit:<br />
Gibt bei jedem Funktionseintritt die Parameter aus und lass dich dann<br />
mal bei einem Test überraschen wohin dein Abbruchkriterium läuft. <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/1084878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1084878</guid><dc:creator><![CDATA[AberHallo]]></dc:creator><pubDate>Sun, 25 Jun 2006 06:52:06 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Sun, 25 Jun 2006 07:08:05 GMT]]></title><description><![CDATA[<p>SERVUS.</p>
<p>ich habe leider vergessen zu erwähnen, dass es am abbruchkriterium doch nicht liegen kann, denn die funktion &quot;verfängt&quot; sich nicht in einer schleife, was doch der normalfall bei einem falschen / schlechten abbruchkriterium ist.</p>
<p>irgendwann, wenn eine bestimmte arrayposition erreicht ist, kommt dieser STACK OVERFLOW. ich weis aber nicht, was an dieser position besonders oder anders sein sollte.</p>
<p>DANKE.<br />
STICK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1084884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1084884</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Sun, 25 Jun 2006 07:08:05 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Sun, 25 Jun 2006 07:10:08 GMT]]></title><description><![CDATA[<p>Naja, die Abbruckbedingung kann schon richtig sein, auch für dich mag sie i.O. sein. Aber der Stack hat nunmla nur eine begrenzte Größe, und die ist nunmal manchmal schnell ausgreizt.</p>
<p>Wenn z.B. 1 Mio. Rekursionen zustande kommen und danach der Abruch erfolgen sollte, und der Stack aber nur 999.999 erlaubt, ist es Pech für dich und es gibt einen Stackoverflow.</p>
<p>Wirst du notfalls ohne Rekursion lösen müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1084887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1084887</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sun, 25 Jun 2006 07:10:08 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Sun, 25 Jun 2006 07:29:57 GMT]]></title><description><![CDATA[<p>das problem tritt bei 8679 Rekursionen auf. das ist doch noch nicht zu viel, oder?</p>
<p>wie kriege ich raus, wieviel der stack erlaubt?</p>
<p>DANKE.</p>
<p>P.S.: mir ist gerade noch eingefallen, dass ich zuvor in der &quot;NEIGHBOUR&quot;-funktion einen kleinen fehler hatte, wodurch das programm zwar auch gelaufen ist, aber nicht alle werte mit der zahl 2 gefunden hat. bei dieser fehlerhaften version ist die funktion &quot;NEIGHBOUR&quot; bis zu 22.000 mal aufgerufen wurde, ohne einen STACK OVERFLOW. nun habe ich sie &quot;berichtigt&quot;, aber das programm bricht eher ab. irgendwie komisch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1084889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1084889</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Sun, 25 Jun 2006 07:29:57 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Sun, 25 Jun 2006 07:36:20 GMT]]></title><description><![CDATA[<p>8679 könnte zu viel sein, warum auch nicht? Weil es sind ja nicht nur 8679 Aufrufe (die würde er verkraften) aber du hast ja bei jedem Aufruf noch zus. Variablen auf dem Stack. Das summiert sich dann ganz schön.</p>
<p>Welches OS oder Compiler hast du? Beim VC++ kann man unter Projekt-&gt;Eigenschaften-&gt;Linker-&gt;System was an den Heap und Stack Werten drehen. Hab ich aber bisher nie gebraucht. Notfalls die MSDN-Hilfe zu Rate ziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1084892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1084892</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sun, 25 Jun 2006 07:36:20 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Sun, 25 Jun 2006 08:04:41 GMT]]></title><description><![CDATA[<p>ja, ich habe jetzt wieder die alte fehlerhafte version getestet.</p>
<p>aus (richtige version):</p>
<pre><code class="language-cpp">if (i+k&gt;=0 &amp;&amp; j+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
</code></pre>
<p>wird (falsche version):</p>
<pre><code class="language-cpp">if (i+k&gt;=0 &amp;&amp; k+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
</code></pre>
<p>jetzt läuft das ganze 24407 mal durch ohne STACK OVERFLOW. das kann ich mir wirklich NICHT erklären.</p>
<p>STICK.</p>
<p>p.s.: ich benutze noch immer VC++ 6.0 sowie XP.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1084896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1084896</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Sun, 25 Jun 2006 08:04:41 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Sun, 25 Jun 2006 12:42:49 GMT]]></title><description><![CDATA[<p>so wie es aussieht, hat niemand von euch noch eine vermutung, wie der LAYER STACK zustande kommt, oder?</p>
<p>also ich bin mit meiner weisheit auch ziemlich am ende <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1085074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1085074</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Sun, 25 Jun 2006 12:42:49 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Sun, 25 Jun 2006 12:51:27 GMT]]></title><description><![CDATA[<p>stick_thai schrieb:</p>
<blockquote>
<p>so wie es aussieht, hat niemand von euch noch eine vermutung, wie der LAYER STACK zustande kommt, oder?</p>
<p>also ich bin mit meiner weisheit auch ziemlich am ende <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>ich schätze eher, so geht es jedenfalls mir, dass sich nicht viele die mühe machen, hier etwas zu lösen. denn auch hier ist wieder das grundprinzip richtiger fragestellung missachtet worden. ohne ein (prinzipiell) ausführbares beispiel, kann hier keiner etwas nachvollziehen. wenn man etwas nicht nachvollziehen kann, kann man auch nicht diagnostizieren. im übrigen ist das, was du als richtige variante bezeichnest, identisch mit dem, das als falsche version bezeichnest wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1085084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1085084</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 25 Jun 2006 12:51:27 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Sun, 25 Jun 2006 12:59:09 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@Camper</a>:</p>
<p>1.) was ist als beispiel besser geeignet als der code, den ich bereits aufgeführt habe? des weiteren habe ich das problem dazu ebenfalls beschrieben. und die fehlermeldung ist auch da.<br />
ich weis nicht, woran es an erklärung noch fehlen sollte. vielleicht kannst du mir ja sagen, was du noch dazu wissen musst? das photo, dass ich mit diesem code interpretieren möchte, kann man ja leider nicht anhängen.</p>
<p>2.) bei mir ist &quot;j+l&gt;=0&quot; und &quot;k+l&gt;=0&quot; nicht das gleiche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1085089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1085089</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Sun, 25 Jun 2006 12:59:09 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Mon, 26 Jun 2006 06:17:57 GMT]]></title><description><![CDATA[<p>HALLO.</p>
<p>ich habe nun den ratschlag von CAMPER umgesetzt und den code so extrahiert, dass er nur noch das prinzipiell auszuführende beispiel enthält. hier ist dazu der gesamte quellcode:</p>
<pre><code class="language-cpp">#include &lt;conio.h&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

int **DATA,DIM[2]={480,544};
void NEIGHBOUR (int,int);

int main()
{
	int i,j,ZAHL;

	DATA = new int *[DIM[0&rsqb;&rsqb;;
	for (i=0;i&lt;DIM[0];i++)
		DATA[i] = new int [DIM[1&rsqb;&rsqb;;

//zu untersuchende daten werden eingelesen
	std::ifstream myfile(&quot;data.txt&quot;);
	i=0;j=0;
	while (!myfile.eof())
	{	
		myfile &gt;&gt; ZAHL;
		DATA[i][j]=ZAHL;
		j++;
		if (DIM[1] == j)
		{
			j=0;
			i++;
		}
	}
	myfile.close();

//daten werden auf zusammenhänge bereiche mit der zahl 2 untersucht
	for (i=0;i&lt;DIM[0];i++)
	{
		for (j=0;j&lt;DIM[1];j++)
		{
			if (2 == DATA[i][j])
			{
				DATA[i][j]=3;
				NEIGHBOUR(i,j);
			}
		}
	}
    return 0;
}

void NEIGHBOUR (int i,int j)
{
	int k,l;

	for (k=-1;k&lt;2;k++)
	{
		for (l=-1;l&lt;2;l++)
		{
			if (i+k&gt;=0 &amp;&amp; j+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
			{
				if (2 == DATA[i+k][j+l])
				{
					DATA[i][j] = 3;
					NEIGHBOUR (i+k,j+l);
				}
			}
		}
	}
}
</code></pre>
<p>zu untersuchen ist, wieviele zusammenhängende elemente enthalten ZWEIEN. zusammenhängend heisst, dass eine 2 einem bereich zugeordnet wird, wenn eines der 8 nächsten nachbarn ebenfalls eine 2 ist. die 8 nachbarn sind, wenn man sich das ganze als bild vorstellt, die 8 pixel, die sich um das zu untersuchende pixel (i+k,j+l) befinden.<br />
mit den zahlenwerten in &quot;data.txt&quot; bleibt der code bei i=69 &amp;&amp; j=313 hängen. dass heisst, an der stelle &quot;NEIGHBOUR (i+k,j+l);&quot; kommt dann der verweis auf den LAYER OVERSTACK.<br />
und das problem tritt nicht auf, wenn ich</p>
<pre><code class="language-cpp">if (i+k&gt;=0 &amp;&amp; j+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
mit 
if (i+k&gt;=0 &amp;&amp; k+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
</code></pre>
<p>austausche.</p>
<p>okay. ich hoffe, dass ich alle notwendigen informationen zusammengetragen habe.</p>
<p>DANKE NOCHMALS.<br />
STICK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1085579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1085579</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Mon, 26 Jun 2006 06:17:57 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Mon, 26 Jun 2006 06:34:55 GMT]]></title><description><![CDATA[<p>stick_thai schrieb:</p>
<blockquote>
<p>und das problem tritt nicht auf, wenn ich</p>
<pre><code class="language-cpp">if (i+k&gt;=0 &amp;&amp; j+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
mit 
if (i+k&gt;=0 &amp;&amp; k+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
</code></pre>
<p>austausche.</p>
</blockquote>
<p>Das Problem tritt also nicht mehr auf, wenn du dein Programm so änderst, dass es nicht mehr funktioniert? Das ist nicht wirklich hilfreich.</p>
<p>Ich sehe da keine logischen Fehler. Je nachdem, wie viele Zweier in deiner Datei sind, sind es eben zu viele Rekursionen. Du kannst versuchen, den Stack zu vergrößern, aber das ist IMHO nur Schmerzverlagerungstherapie. Warum suchst du nicht nach einem iterativen Ansatz? Die Verwaltungsdaten dafür könntest du auf dem Heap anlegen, der wird dir nicht so schnell ausgehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1085590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1085590</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 26 Jun 2006 06:34:55 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Mon, 26 Jun 2006 06:42:42 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a>:<br />
danke für die antwort. ich habe leider diesmal nicht erwähnt, was die veränderung zeigen soll, weil ich das schon einmal geschrieben hatte.</p>
<p>bei der richtigen version, also mit i+k&gt;=0 &amp;&amp; j+l&gt;=0, ist die anzahl der durchläufe der schleife so ca. 8000.<br />
bei der falschen version, also mit i+k&gt;=0 &amp;&amp; k+l&gt;=0, beträgt der maximale durchlauf der schleife ca 24.000, ohne einen LAYER STACK OVERFLOW.</p>
<p>darum ist meine vermutung, dass der LAYER STACK nicht zu klein ist, oder sehe ich das falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1085596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1085596</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Mon, 26 Jun 2006 06:42:42 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Mon, 26 Jun 2006 06:48:19 GMT]]></title><description><![CDATA[<blockquote>
<p>darum ist meine vermutung, dass der LAYER STACK nicht zu klein ist, oder sehe ich das falsch?</p>
</blockquote>
<p>Das siehst du falsch. Es ist egal, wie oft die Schleife durchlaufen wird. Entscheidend ist die Rekursionstiefe.</p>
<p>So kannst du Rekursionstiefe nachhalten:</p>
<pre><code class="language-cpp">int depth = 0;
int maxdepth = 0;

void NEIGHBOUR (int i,int j)
{
    ++depth;
    if(depth &gt; maxdepth) maxdepth = depth;

    int k,l;

    for (k=-1;k&lt;2;k++)
    {
        for (l=-1;l&lt;2;l++)
        {
            if (i+k&gt;=0 &amp;&amp; j+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
            {
                if (2 == DATA[i+k][j+l])
                {
                    DATA[i][j] = 3;
                    NEIGHBOUR (i+k,j+l);
                }
            }
        }
    }
    --depth;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1085598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1085598</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 26 Jun 2006 06:48:19 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Mon, 26 Jun 2006 06:57:08 GMT]]></title><description><![CDATA[<p>.... musst Du Stackgrösse in den Compileroptionen der IDE erhöhen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1085607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1085607</guid><dc:creator><![CDATA[linux]]></dc:creator><pubDate>Mon, 26 Jun 2006 06:57:08 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Mon, 26 Jun 2006 07:59:23 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a>:<br />
ich habe deine veränderungen im code angebracht und tatsächlich ist die maximale tiefe bei der &quot;falschen version&quot; gerade mal 1680, während bei der &quot;richtigen version&quot; der STACK OVERFLOW bei ca. 25800 eintritt.</p>
<p>muss ich das ganze wohl doch iterativ machen, schade.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1085652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1085652</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Mon, 26 Jun 2006 07:59:23 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Mon, 26 Jun 2006 08:53:52 GMT]]></title><description><![CDATA[<p>stick_thai schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a>:<br />
ich habe deine veränderungen im code angebracht und tatsächlich ist die maximale tiefe bei der &quot;falschen version&quot; gerade mal 1680, während bei der &quot;richtigen version&quot; der STACK OVERFLOW bei ca. 25800 eintritt.</p>
<p>muss ich das ganze wohl doch iterativ machen, schade.</p>
</blockquote>
<p>so wie ich das sehe, ist die potentielle rekursionstiefe gleich dem größe des feldes, also 480*544 = 261120. ein sicherer algorithmus muss damit zurechtkommen. eine iterative variante ist ja hier relativ leicht zu erstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1085700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1085700</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 26 Jun 2006 08:53:52 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Tue, 27 Jun 2006 05:45:46 GMT]]></title><description><![CDATA[<p>HALLO.</p>
<p>erstmal danke, dass ihr mich darauf aufmerksam gemacht habt, dass es auch mit einer iterativen funktion gehen muss. habe diese information nun umgesetzt in folgende NEIGHBOUR-funktion:</p>
<pre><code class="language-cpp">void NEIGHBOUR (int **data,int i, int j,int DIM[2],double MAX[2])
{
	int k,l;
	ENT[0]=0;
	vector &lt;int&gt; PKTE;
	vector &lt;int&gt;::iterator it;

	while (0==ENT[0])
	{
		if (MAX[0]!=1)
		{
			it = PKTE.end();
			PKTE.erase(--it);
			it = PKTE.end();
			PKTE.erase(--it);
		}
		for (k=-1;k&lt;2;k++)
		{
			for (l=-1;l&lt;2;l++)
			{
				if (i+k&gt;=0 &amp;&amp; j+l&gt;=0 &amp;&amp; i+k&lt;DIM[0] &amp;&amp; j+l&lt;DIM[1])
				{
					if (2 == data[i+k][j+l])
					{
						data[i+k][j+l]= 3;
						MAX[0]++;
						PKTE.push_back(i+k);
						PKTE.push_back(j+l);
					}
				}
			}
		}
		if ((int)PKTE.size()&gt;0)
		{
			i = PKTE[PKTE.size()-2];
			j = PKTE[PKTE.size()-1];
		}		
		else ENT[0]=1;
	}
	ENT[0]=0;
}
</code></pre>
<p>meine frage dazu wäre, ob man das noch irgendwie optimieren / beschleunigen kann, oder ist das jetzt schon gut so?</p>
<p>DANKE!<br />
STICK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1086505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1086505</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Tue, 27 Jun 2006 05:45:46 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Tue, 27 Jun 2006 06:54:13 GMT]]></title><description><![CDATA[<p>Hallo stick_thai,</p>
<p>vielleicht kannst du in deiner rekursiven Variante das l (L) mal durch eine andere Variable ersetzen. Mit einer, die der 1 (eins) nicht so ähnlich ist. Vielleicht hast du dich da ja einmal vertippt.<br />
Kann natürlich auch einfach nur die Schrift hier sein....</p>
<p>Nur eine Idee,<br />
Jens</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1086539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1086539</guid><dc:creator><![CDATA[jenz2]]></dc:creator><pubDate>Tue, 27 Jun 2006 06:54:13 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Tue, 27 Jun 2006 07:02:20 GMT]]></title><description><![CDATA[<p>stick_thai schrieb:</p>
<blockquote>
<p>meine frage dazu wäre, ob man das noch irgendwie optimieren / beschleunigen kann, oder ist das jetzt schon gut so?</p>
</blockquote>
<p>Die Vorgehensweise ist so schon ganz gut. Ich würde die (i+k)-Bereichsprüfung aus der inneren Schleife in die äußere verlegen. Wenn i+k nicht passt, kannst du dir diesen Durchlauf der inneren Schleife komplett schenken.</p>
<p>Außerdem würde ich, statt immer paarweise ints abzulegen, lieber eine Struktur mit zwei int-Membern oder ein std::pair&lt;int, int&gt; ablegen. Das dient eher der Übersichtlichkeit als der Geschwindigkeit.</p>
<p>Statt erase mit dem dekrementierten end-Iterator aufzurufen, könntest du auch einfach std::vector::pop_back benutzen, und statt über den Index size() - 1 zu gehen, std::vector::back nehmen. Aber auch das hat vermutlich wenig Einfluss auf die Geschwindigkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1086547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1086547</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 27 Jun 2006 07:02:20 GMT</pubDate></item><item><title><![CDATA[Reply to 0*C00000FD Stack overflow on Tue, 27 Jun 2006 08:01:37 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a>:<br />
danke für die hinweise, wieder was dazugelernt <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/1086595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1086595</guid><dc:creator><![CDATA[*stick_thai]]></dc:creator><pubDate>Tue, 27 Jun 2006 08:01:37 GMT</pubDate></item></channel></rss>