<?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[Segmentation fault bzw. Endlosrekursion]]></title><description><![CDATA[<p>Hallo liebes Forum <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>
<p>Ich habe mir zu Aufgabe gestellt eine primitive Grammatik zum Parsen mathematischer Terme zu programmieren. Leider verliert sich mein Code in einer Endlosrekursion.</p>
<pre><code>double getAusdruck(std::vector&lt;std::string&gt; exp)
{
	double zwierg;
	double erg;
	std::vector&lt;std::string&gt; zwexp;
	std::vector&lt;std::string&gt; ausdruck;
	int i = 0;
	for(i; i &lt; exp.size() &amp;&amp; i != -1; i++)
	{
		if(exp[i] == &quot;+&quot;)
		{
			zwierg = getTerm(ausdruck);
			for(int j = i+1; j &lt; exp.size(); j++)
			{
				zwexp.push_back(exp[j]);
			}
			i = -1;
			erg = zwierg + getAusdruck(zwexp);
		}
		else if(exp[i] == &quot;-&quot;)
		{
			zwierg = getTerm(ausdruck);
			for(int j = i+1; j &lt; exp.size(); j++)
			{
				zwexp.push_back(exp[j]);
			}
			i = -1;
			erg = zwierg - getAusdruck(zwexp);
		}
		else
		{
			ausdruck.push_back(exp[i]);
		}
	}
	if(i &gt;= exp.size())
	{
		erg = getTerm(ausdruck);
	}
	return erg;
}
</code></pre>
<p>Ich übergebe der Funktion einen vector&lt;string&gt; in folgender Form:<br />
Glied 0 -&gt; &quot;2&quot;<br />
Glied 1 -&gt; &quot;+&quot;<br />
Glied 2 -&gt; &quot;2&quot;</p>
<p>Nun müsste ich eigentlich immer 0 zurückgegeben bekommen, weil getTerm() nur 0 zurückgeben kann. Dies funktioniert allerdings nicht wenn ein &quot;+&quot; oder &quot;-&quot; im vector liegt, denn dann entsteht die Endlosrekursion.</p>
<p>Leider bin ich mit meinem Latein am Ende und wende mich nun an euch.</p>
<p>MfG luggas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/316536/segmentation-fault-bzw-endlosrekursion</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 20:48:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316536.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 May 2013 13:13:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Segmentation fault bzw. Endlosrekursion on Tue, 07 May 2013 13:13:42 GMT]]></title><description><![CDATA[<p>Hallo liebes Forum <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>
<p>Ich habe mir zu Aufgabe gestellt eine primitive Grammatik zum Parsen mathematischer Terme zu programmieren. Leider verliert sich mein Code in einer Endlosrekursion.</p>
<pre><code>double getAusdruck(std::vector&lt;std::string&gt; exp)
{
	double zwierg;
	double erg;
	std::vector&lt;std::string&gt; zwexp;
	std::vector&lt;std::string&gt; ausdruck;
	int i = 0;
	for(i; i &lt; exp.size() &amp;&amp; i != -1; i++)
	{
		if(exp[i] == &quot;+&quot;)
		{
			zwierg = getTerm(ausdruck);
			for(int j = i+1; j &lt; exp.size(); j++)
			{
				zwexp.push_back(exp[j]);
			}
			i = -1;
			erg = zwierg + getAusdruck(zwexp);
		}
		else if(exp[i] == &quot;-&quot;)
		{
			zwierg = getTerm(ausdruck);
			for(int j = i+1; j &lt; exp.size(); j++)
			{
				zwexp.push_back(exp[j]);
			}
			i = -1;
			erg = zwierg - getAusdruck(zwexp);
		}
		else
		{
			ausdruck.push_back(exp[i]);
		}
	}
	if(i &gt;= exp.size())
	{
		erg = getTerm(ausdruck);
	}
	return erg;
}
</code></pre>
<p>Ich übergebe der Funktion einen vector&lt;string&gt; in folgender Form:<br />
Glied 0 -&gt; &quot;2&quot;<br />
Glied 1 -&gt; &quot;+&quot;<br />
Glied 2 -&gt; &quot;2&quot;</p>
<p>Nun müsste ich eigentlich immer 0 zurückgegeben bekommen, weil getTerm() nur 0 zurückgeben kann. Dies funktioniert allerdings nicht wenn ein &quot;+&quot; oder &quot;-&quot; im vector liegt, denn dann entsteht die Endlosrekursion.</p>
<p>Leider bin ich mit meinem Latein am Ende und wende mich nun an euch.</p>
<p>MfG luggas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321697</guid><dc:creator><![CDATA[luggas]]></dc:creator><pubDate>Tue, 07 May 2013 13:13:42 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bzw. Endlosrekursion on Tue, 07 May 2013 13:23:06 GMT]]></title><description><![CDATA[<p>Ich finde erstmal das hier &quot;unpassend&quot;:</p>
<pre><code>i &lt; exp.size()
</code></pre>
<p>i ist ein INT<br />
exp.size() ist ein UNSIGNED INT</p>
<p>Der Vergleich müsste bei dir mindestens eine Warnung geben.</p>
<p>Wenn du unbedingt aus der for-Schleife rauswillst, verwende doch &quot;break&quot; anstatt der Prüfung auf &quot;i == -1&quot;.</p>
<p>Das wird vermutlich dein Problem nicht lösen, aber ist erstmal ein Anfang.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321701</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Tue, 07 May 2013 13:23:06 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bzw. Endlosrekursion on Tue, 07 May 2013 13:32:58 GMT]]></title><description><![CDATA[<p>Danke das wars. Ich glaub es nicht es lag daran das int und unsigned int nicht harmonieren. Wahrscheinlich weil ich i auf -1 gesetzt hab. Der compiler hatte aber nix gesagt, das ist ganzschön krass. <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/2321705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321705</guid><dc:creator><![CDATA[luggas]]></dc:creator><pubDate>Tue, 07 May 2013 13:32:58 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bzw. Endlosrekursion on Tue, 07 May 2013 13:33:48 GMT]]></title><description><![CDATA[<p>Lässt du dir auch Warnungen anzeigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321706</guid><dc:creator><![CDATA[Fuchs aus dem Wald]]></dc:creator><pubDate>Tue, 07 May 2013 13:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bzw. Endlosrekursion on Tue, 07 May 2013 13:44:45 GMT]]></title><description><![CDATA[<p>denke schon ich benutze g++ auf ubuntu server oder muss man da noch nen parameter setzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321710</guid><dc:creator><![CDATA[luggas]]></dc:creator><pubDate>Tue, 07 May 2013 13:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bzw. Endlosrekursion on Tue, 07 May 2013 13:49:01 GMT]]></title><description><![CDATA[<p>luggas schrieb:</p>
<blockquote>
<p>denke schon ich benutze g++ auf ubuntu server oder muss man da noch nen parameter setzen?</p>
</blockquote>
<p>Benutz mindestens &quot;-Wall&quot;. Wenn du magst sogar noch dazu &quot;-Wextra&quot; und &quot;-pedantic&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321711</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 07 May 2013 13:49:01 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bzw. Endlosrekursion on Tue, 07 May 2013 13:49:05 GMT]]></title><description><![CDATA[<p>luggas schrieb:</p>
<blockquote>
<p>denke schon ich benutze g++ auf ubuntu server oder muss man da noch nen parameter setzen?</p>
</blockquote>
<p>Flags musst du setzen. Ich hab z.B. folgende gesetzt: <code>-march=native -O2 -Wall -Wextra -pedantic -Wswitch-default -Wfloat-equal -std=c++0x -std=gnu++0x -Wc++0x-compat</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321712</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Tue, 07 May 2013 13:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault bzw. Endlosrekursion on Tue, 07 May 2013 13:52:29 GMT]]></title><description><![CDATA[<p>danke jetzt bekomme ich warnungen nice</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321715</guid><dc:creator><![CDATA[luggas]]></dc:creator><pubDate>Tue, 07 May 2013 13:52:29 GMT</pubDate></item></channel></rss>