<?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[Exception bei Übergabe von Vectoren an rekursive Funktion]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe eine Funtion</p>
<pre><code>void foo( vector&lt;blub*&gt;&amp;bvec1, vector&lt;blab*&gt;&amp; vec2, vector&lt;blob*&gt;&amp; vec3)
</code></pre>
<p>In dieser Funktion lösche Ich ein oder mehrere Elemnte von bvec2 und füge Elemente zu vec3 hinzu.</p>
<p>Am Ende ruft sich die Funktion selbst wieder auf, rekursion eben.</p>
<p>Beim Debuggen bin ich die Funtion durchgegangen und bei</p>
<pre><code>return foo(vec1, vec2, vec3)
</code></pre>
<p>Erhalte ich eine Exception:</p>
<pre><code>An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in foo.exe

Additional information: External component has thrown an exception.
</code></pre>
<p>Diese Exceoption tritt beim übergeben auf da ich mit dem Debugger gar nicht erst wieder in die rekursiv aufgerufene Funtion komme.</p>
<p>Leider bin ich mit meinem Latein am ende.<br />
Hat jemmand eine Idee?</p>
<p>gruss<br />
deb</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161756/exception-bei-übergabe-von-vectoren-an-rekursive-funktion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 23:42:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161756.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Oct 2006 20:11:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Tue, 10 Oct 2006 20:11:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe eine Funtion</p>
<pre><code>void foo( vector&lt;blub*&gt;&amp;bvec1, vector&lt;blab*&gt;&amp; vec2, vector&lt;blob*&gt;&amp; vec3)
</code></pre>
<p>In dieser Funktion lösche Ich ein oder mehrere Elemnte von bvec2 und füge Elemente zu vec3 hinzu.</p>
<p>Am Ende ruft sich die Funktion selbst wieder auf, rekursion eben.</p>
<p>Beim Debuggen bin ich die Funtion durchgegangen und bei</p>
<pre><code>return foo(vec1, vec2, vec3)
</code></pre>
<p>Erhalte ich eine Exception:</p>
<pre><code>An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in foo.exe

Additional information: External component has thrown an exception.
</code></pre>
<p>Diese Exceoption tritt beim übergeben auf da ich mit dem Debugger gar nicht erst wieder in die rekursiv aufgerufene Funtion komme.</p>
<p>Leider bin ich mit meinem Latein am ende.<br />
Hat jemmand eine Idee?</p>
<p>gruss<br />
deb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152457</guid><dc:creator><![CDATA[deb]]></dc:creator><pubDate>Tue, 10 Oct 2006 20:11:19 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Tue, 10 Oct 2006 20:30:33 GMT]]></title><description><![CDATA[<p>HI, mehr Code wäre hilfreich...<br />
Meinst du nicht STL-Algorithmen könnten deine Funktion ersetzten ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152463</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 10 Oct 2006 20:30:33 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Tue, 10 Oct 2006 21:07:26 GMT]]></title><description><![CDATA[<p>eine SEH exception deutet darauf hin dass du dir irgendwo den speicher zerschossen hast. du hantierst ja auch mit zeigern rum... ueberpruefe das mal genauer... du loescht sachen - also schau nach ob du schoen brav das richtige loeschst und alle deine zeiger auch gueltig bleiben, etc...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152483</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 10 Oct 2006 21:07:26 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Tue, 10 Oct 2006 21:16:29 GMT]]></title><description><![CDATA[<p>@FreakCoder:<br />
Ich glaube nicht das die stl ein system von ungleichungen ordnen kann:)</p>
<p>@Shade Of Mine</p>
<p>Also das löschen:</p>
<pre><code>vector&lt;blub*&gt;::iterator it = vecblub.begin();

while(it != vecblub.end())
{	
	if( (**it).value ==  5){
		delete (*it);
		it = Inequations.erase(it);
	}
	else
		++it;
}
</code></pre>
<p>Ich hatte erst kein delete aber auch wenn ich ein delete dabei habe hängt es sich auf.</p>
<p>gruss<br />
deb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152489</guid><dc:creator><![CDATA[deb]]></dc:creator><pubDate>Tue, 10 Oct 2006 21:16:29 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Wed, 11 Oct 2006 07:08:52 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>nicht, dass ich wirklich helfe könnte, aber</p>
<p>deb schrieb:</p>
<blockquote>
<pre><code>...'System.Runtime.InteropServices.SEHException'...
</code></pre>
</blockquote>
<p>mich erinnert diese Benamsung eigentlich eher an Java denn an C++.<br />
Kann es sein, dass Du irgendein Framework verwendest, dass sich hier beklagt ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152608</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 11 Oct 2006 07:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Wed, 11 Oct 2006 12:13:51 GMT]]></title><description><![CDATA[<p>System.Runtime.InteropServices.SEHException ist .Net. Das tut aber nichts zur Sache, da dort der C++ Code auch gültig ist. Insofern also kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152874</guid><dc:creator><![CDATA[Antwort]]></dc:creator><pubDate>Wed, 11 Oct 2006 12:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Wed, 11 Oct 2006 12:17:37 GMT]]></title><description><![CDATA[<p>Und übrigens: System.Runtime.InteropServices.SEHException kapselt eine SEHException aus dem nativen Code, damit sie managed (z.B. von C#) abgefangen werden kann. Sie tritt hier auf, weil sie auf die oberste Ebene kocht und dann in main (welches mindestens managed/unmanaged gemischst ist) die Ausführung abbricht. Wenn du nun einen Stack-Trace sehen willst, fange die Exception und gib sie via Console::Write aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152880</guid><dc:creator><![CDATA[Antwort]]></dc:creator><pubDate>Wed, 11 Oct 2006 12:17:37 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Wed, 11 Oct 2006 12:59:56 GMT]]></title><description><![CDATA[<p>deb der code ist korrekt. lass dir wirklich mal nen trace ausgeben, dann siehst du in welcher zeile der fehler fliegt.<br />
du sagst ja auch dass du etwas rekursiv machst, dann kann man auch mal leicht nen zeiger fehler machen...</p>
<p>vielleicht schmiert ja auch das delete ab, weil der zeiger ungueltig ist.</p>
<p>debugger und/oder stacktrace verraten dir mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152902</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 11 Oct 2006 12:59:56 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Wed, 11 Oct 2006 13:30:41 GMT]]></title><description><![CDATA[<p>Was meinst du mit stacktrace?Leider habe ich noch nie was davon gehört.<br />
Ich bin bisher eben immer schrittweise meinen Code durchgegangen und hab geschaut wie sich die variablen veränderen.</p>
<p>Das Probelm ist das der Exception geworfen wird beim return der funktion.<br />
also bei</p>
<pre><code>return foo(veca, vecb, vecc);
</code></pre>
<p>mh eigentlich kann an den 3 vektoren nichts faul sein... es sind jeweils referenzen auf vector&lt;bla*&gt;* und den speicher habe ich mit new reserviert.</p>
<p>so long<br />
deb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152917</guid><dc:creator><![CDATA[deb]]></dc:creator><pubDate>Wed, 11 Oct 2006 13:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Wed, 11 Oct 2006 13:39:30 GMT]]></title><description><![CDATA[<p>deb schrieb:</p>
<blockquote>
<p>Was meinst du mit stacktrace?Leider habe ich noch nie was davon gehört.</p>
</blockquote>
<p>fang die exception die fliegt mal selber ab, mit try/catch</p>
<p>und die Exception die du dann faengst hat ein property &quot;StackTrace&quot;.<br />
Das liefert dir nen string der dir zeigt wo was alles aufgerufen wurde. und auch wo die exception geflogen ist.</p>
<blockquote>
<p>mh eigentlich kann an den 3 vektoren nichts faul sein... es sind jeweils referenzen auf vector&lt;bla*&gt;* und den speicher habe ich mit new reserviert.</p>
</blockquote>
<p>bei zeigern kann immer irgendwas faul sein <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>
<p>wirf deinen debugger an und schau wo der fehler genau ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152921</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 11 Oct 2006 13:39:30 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Wed, 11 Oct 2006 18:28:18 GMT]]></title><description><![CDATA[<p>Hi ich konnte das Problem jetzt lösen hatte dummes zueg mit einem pointer gemacht.</p>
<p>Nur habe ich jetzt schon wieder ein Problem:</p>
<p>Beim hinzufügen zu einem vektor erhalte ich:<br />
&quot;vector subscript out of range&quot;</p>
<p>das komische ist das es erst aufgetretten ist nachdem ich mehr als 4 elemente dem vektor hinzugefügt habe. wenn ich die zusätzlichen wiederauskommentiere erhalte ich den Fehler immernoch.</p>
<p>Der code:</p>
<pre><code>class Inequation
{
	public:

	Inequation(unsigned int Smaller,unsigned int Higher	)
		: smaller(Smaller),higher(Higher)	
	{
	}	

	unsigned int smaller;	
	unsigned int higher;	
};	

...
	vector&lt;Inequation*&gt;* Inequations = new vector&lt;Inequation*&gt;;
    Inequations-&gt;push_back(new Inequation(7, 8));
</code></pre>
<p>Das Problem ist mir leider völlig schleierhaft?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1153096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1153096</guid><dc:creator><![CDATA[deb]]></dc:creator><pubDate>Wed, 11 Oct 2006 18:28:18 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Wed, 11 Oct 2006 18:32:07 GMT]]></title><description><![CDATA[<p>Sorry mein letzter Beitrag stimmt nicht, der fehler ereignet sich beim übergeben in eine Funtion.<br />
Ich erstelle 3 ähnliche vektoren nur mit anderen elementen und nur bei einem erhalte ich die Fehlermeldung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1153102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1153102</guid><dc:creator><![CDATA[deb]]></dc:creator><pubDate>Wed, 11 Oct 2006 18:32:07 GMT</pubDate></item><item><title><![CDATA[Reply to Exception bei Übergabe von Vectoren an rekursive Funktion on Wed, 11 Oct 2006 18:42:55 GMT]]></title><description><![CDATA[<p>Nachtrag:</p>
<p>Bei</p>
<pre><code>Inequations-&gt;push_back(new Inequation(7, 8));
</code></pre>
<p>hängt sich mein Programm auf.</p>
<p>Bei</p>
<pre><code>Inequations-&gt;push_back(new Inequation(7, 7));
</code></pre>
<p>hängt sich das Programm nicht auf.</p>
<p>Der Error kommt aus folgender stl funktion</p>
<pre><code>reference operator[](size_type _Pos)
		{	// subscript mutable sequence

 #if _HAS_ITERATOR_DEBUGGING
		if (size() &lt;= _Pos)
			{
			_DEBUG_ERROR(&quot;vector subscript out of range&quot;);
			_SCL_SECURE_OUT_OF_RANGE;
			}
 #endif /* _HAS_ITERATOR_DEBUGGING */
		_SCL_SECURE_VALIDATE_RANGE(_Pos &lt; size());

		return (*(_Myfirst + _Pos));
		}
</code></pre>
<p>Ich hab die Funtion mal gedebuggt und wenn sich mein Programm aufhängt dann ist _Pos = 8 ? Kann das ein Zufall sein? Kann der stl beim verwalten der Klasse ein Fehler unterlaufen sein und es wurde in einen falschen speicherbereich geschrieben der eigentlich _Pos ist?</p>
<p>so long<br />
deb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1153107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1153107</guid><dc:creator><![CDATA[deb]]></dc:creator><pubDate>Wed, 11 Oct 2006 18:42:55 GMT</pubDate></item></channel></rss>