<?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[Problem bei rekursion und Call byRef]]></title><description><![CDATA[<p>Hallo, ich habe ein Problem mit der Rekursion und Parametern die byRef übergeben werden:<br />
Und zwar habe ich einen Baum realsiert über eine Datenstruktur von links (from, to). Jeder dieser Knoten hat eine ID.<br />
Ich suche also jetzt einen Weg von Knoten 4 nach 7. Dabei will ich den Baum in einer Art Breitensuche durchwandern um eine Weg von 4 nach 7 zu finden...</p>
<pre><code>bool experience_map_mean::graphsearch(std::vector&lt;std::vector&lt;Link_mean&gt; &gt;&amp; _links, std::vector&lt;int&gt; pc_ids_from, uint pc_id_to, std::vector&lt;int&gt; &amp;path) {

	std::vector&lt;int&gt; childs;
	int from;

	if (pc_ids_from.size() &lt;= 0) {
		return false;
	}
	for (uint h=0; h &lt; pc_ids_from.size(); h++) {
		from = pc_ids_from.at(h);

		for (uint i = 0; i &lt; _links.at(from).size(); i++) {
			if ((!(_links.at(from).at(i).visited)) &amp;&amp; (_links.at(from).at(i).delta_time_s &gt; 0)) {
				_links.at(from).at(i).visited = true;

				if (i == pc_id_to) { //found
					path.push_back(from);
					path.push_back(pc_id_to);
					return true;

				} else {
					childs.push_back(i);
				}
			} //if visited
		}
	}

		bool _bool = graphsearch(_links, childs, pc_id_to, path);	
		if (_bool) {
			path.insert(path.begin(), pc_ids_from.front());
			return true;
	}
	return false;
}
</code></pre>
<p>Nach ein paar Durchläufen bekomme ich immer einen &quot;Speicherzugriffsfehler&quot; an der Stelle, wo die Rekursion immer wieder aufgerufen wird.</p>
<p>Wenn ich _links nicht als Ref, sondern byVal übergebe, dann bekomme ich den Fehler nicht.</p>
<pre><code>bool experience_map_mean::graphsearch(std::vector&lt;std::vector&lt;Link_mean&gt; &gt; _links, std::vector&lt;int&gt; pc_ids_from, uint pc_id_to, std::vector&lt;int&gt; &amp;path) {
</code></pre>
<p>Leider ist der Vektor sehr groß und daher ein ständiges kopieren nicht wirklich vorteilhaft.</p>
<p>Hat jmd. eine Idee, warum das mit ByRef nicht geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/323847/problem-bei-rekursion-und-call-byref</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 10:52:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/323847.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Feb 2014 15:38:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei rekursion und Call byRef on Wed, 19 Feb 2014 15:51:29 GMT]]></title><description><![CDATA[<p>Hallo, ich habe ein Problem mit der Rekursion und Parametern die byRef übergeben werden:<br />
Und zwar habe ich einen Baum realsiert über eine Datenstruktur von links (from, to). Jeder dieser Knoten hat eine ID.<br />
Ich suche also jetzt einen Weg von Knoten 4 nach 7. Dabei will ich den Baum in einer Art Breitensuche durchwandern um eine Weg von 4 nach 7 zu finden...</p>
<pre><code>bool experience_map_mean::graphsearch(std::vector&lt;std::vector&lt;Link_mean&gt; &gt;&amp; _links, std::vector&lt;int&gt; pc_ids_from, uint pc_id_to, std::vector&lt;int&gt; &amp;path) {

	std::vector&lt;int&gt; childs;
	int from;

	if (pc_ids_from.size() &lt;= 0) {
		return false;
	}
	for (uint h=0; h &lt; pc_ids_from.size(); h++) {
		from = pc_ids_from.at(h);

		for (uint i = 0; i &lt; _links.at(from).size(); i++) {
			if ((!(_links.at(from).at(i).visited)) &amp;&amp; (_links.at(from).at(i).delta_time_s &gt; 0)) {
				_links.at(from).at(i).visited = true;

				if (i == pc_id_to) { //found
					path.push_back(from);
					path.push_back(pc_id_to);
					return true;

				} else {
					childs.push_back(i);
				}
			} //if visited
		}
	}

		bool _bool = graphsearch(_links, childs, pc_id_to, path);	
		if (_bool) {
			path.insert(path.begin(), pc_ids_from.front());
			return true;
	}
	return false;
}
</code></pre>
<p>Nach ein paar Durchläufen bekomme ich immer einen &quot;Speicherzugriffsfehler&quot; an der Stelle, wo die Rekursion immer wieder aufgerufen wird.</p>
<p>Wenn ich _links nicht als Ref, sondern byVal übergebe, dann bekomme ich den Fehler nicht.</p>
<pre><code>bool experience_map_mean::graphsearch(std::vector&lt;std::vector&lt;Link_mean&gt; &gt; _links, std::vector&lt;int&gt; pc_ids_from, uint pc_id_to, std::vector&lt;int&gt; &amp;path) {
</code></pre>
<p>Leider ist der Vektor sehr groß und daher ein ständiges kopieren nicht wirklich vorteilhaft.</p>
<p>Hat jmd. eine Idee, warum das mit ByRef nicht geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384081</guid><dc:creator><![CDATA[Hansi22]]></dc:creator><pubDate>Wed, 19 Feb 2014 15:51:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei rekursion und Call byRef on Wed, 19 Feb 2014 16:21:51 GMT]]></title><description><![CDATA[<p>So auf die Schnelle nicht. Mach mein ein minimales kompilierbares Beispiel, dann schau ichs mir mal an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384095</guid><dc:creator><![CDATA[DarkShadow44]]></dc:creator><pubDate>Wed, 19 Feb 2014 16:21:51 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei rekursion und Call byRef on Wed, 19 Feb 2014 16:48:59 GMT]]></title><description><![CDATA[<p>Okay. Das Problem liegt daran, dass</p>
<pre><code>bool _bool = graphsearch(_links, childs, pc_id_to, path);
</code></pre>
<p>aufgerufen wird, childs aber manchmal leer sein kann.</p>
<p>Das kann ich ja einfach beheben, indem ich die Größe checke.</p>
<p>Jetzt habe ich aber ein anderes Problem: Ich bin davon ausgegangen, dass ich eine einfache Vorwärtssuche von der Wurzel zum Knoten habe. Das ist leider nicht so, denn ich habe auch rückwärtige Links von z.B. 5 -&gt; 6 -&gt; 2 -&gt; 7.</p>
<p>Ich habe mir einen 2D Vector angelegt Vec[from][to], welcher Alle Verküpfungen von nach speichert. Ich prüfe, ob in einem Vectorelement gültige Daten stehen und nur dann verarbeite ich das Element. Dennoch habe ich eine zu hohe Laufzeit.</p>
<p>Wie bekomm ich die Suchzeit runter? - Mein Vector besteht teilweise aus [20000][20000] Elementen, von denen aber nur 10% mit Daten gefüllt sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384101</guid><dc:creator><![CDATA[Hansi22]]></dc:creator><pubDate>Wed, 19 Feb 2014 16:48:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei rekursion und Call byRef on Wed, 19 Feb 2014 17:25:57 GMT]]></title><description><![CDATA[<p>Sortieren und unbenutzte Teile einfach bei der Suche auslassen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2384107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2384107</guid><dc:creator><![CDATA[DarkShadow44]]></dc:creator><pubDate>Wed, 19 Feb 2014 17:25:57 GMT</pubDate></item></channel></rss>