<?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[pointerrückgabe führt zu fehler!]]></title><description><![CDATA[<p>diese funktion soll eine textdatei lesen, die zahlen darin in einen 2d-map packen und diese dann zurückgeben.<br />
in diesem fall ist die map 16X16 felder groß. die ausgabe ist im moment auskommentiert, aber gab immer korrekte werte zurück. wenn ich aber auf den rückgabewert zurückgreife kommt scheiße raus.</p>
<pre><code class="language-cpp">float *loadMap(char* file, int sizeX, int sizeY) {
	float map[sizeX][sizeY];

	std::ifstream Quelldatei(file, std::ios_base::in);
	if (!Quelldatei) {
		std::cerr &lt;&lt; &quot;Ausgabe-Datei kann nicht geöffnet werden\n&quot;;
		return 0;
	}
	else {
		std::string zeile = &quot;&quot;;
		string str = &quot;&quot;;
		float curH;
		int _zeile = 0;
		int _spalte = 0;
		while(getline(Quelldatei, zeile)) {
// 			std::cout&lt;&lt;std::endl&lt;&lt;&quot;Zeile: &quot;&lt;&lt;_zeile&lt;&lt;std::endl;
			for(int i = 0; i &lt; zeile.length(); i++) {
				if(zeile[i] != ',')
					str += zeile[i];
				else {
					curH = atof(str.c_str() );
					str = &quot;&quot;;
					map[_zeile][_spalte] = curH;

// 					std::cout&lt;&lt;map[_zeile][_spalte]&lt;&lt;&quot;; &quot;;
					if(_spalte &lt; sizeX-1)
						_spalte++;
				}
			}
			if(_zeile &lt; sizeY-1)
				_zeile++;
		}
		Quelldatei.close();
		return map[0];
	}
}
</code></pre>
<p>wenn ich damit auf die ersten elemente der jeweils 1.,2.,3. zeile zugreife kommt nur beim zugriff auf das 1. element ein guter bzw. richtiger wert heraus.</p>
<pre><code class="language-cpp">float *map = loadMap(&quot;hMap3.txt&quot;, 16, 16);
	std::cout&lt;&lt;map[0]&lt;&lt;&quot; &quot;&lt;&lt;map[16]&lt;&lt;&quot; &quot;&lt;&lt;map[32]&lt;&lt;std::endl;
</code></pre>
<p>ich verstehe nicht was da nicht passt!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/214215/pointerrückgabe-führt-zu-fehler</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 18:41:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/214215.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 26 May 2008 23:47:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to pointerrückgabe führt zu fehler! on Mon, 26 May 2008 23:47:15 GMT]]></title><description><![CDATA[<p>diese funktion soll eine textdatei lesen, die zahlen darin in einen 2d-map packen und diese dann zurückgeben.<br />
in diesem fall ist die map 16X16 felder groß. die ausgabe ist im moment auskommentiert, aber gab immer korrekte werte zurück. wenn ich aber auf den rückgabewert zurückgreife kommt scheiße raus.</p>
<pre><code class="language-cpp">float *loadMap(char* file, int sizeX, int sizeY) {
	float map[sizeX][sizeY];

	std::ifstream Quelldatei(file, std::ios_base::in);
	if (!Quelldatei) {
		std::cerr &lt;&lt; &quot;Ausgabe-Datei kann nicht geöffnet werden\n&quot;;
		return 0;
	}
	else {
		std::string zeile = &quot;&quot;;
		string str = &quot;&quot;;
		float curH;
		int _zeile = 0;
		int _spalte = 0;
		while(getline(Quelldatei, zeile)) {
// 			std::cout&lt;&lt;std::endl&lt;&lt;&quot;Zeile: &quot;&lt;&lt;_zeile&lt;&lt;std::endl;
			for(int i = 0; i &lt; zeile.length(); i++) {
				if(zeile[i] != ',')
					str += zeile[i];
				else {
					curH = atof(str.c_str() );
					str = &quot;&quot;;
					map[_zeile][_spalte] = curH;

// 					std::cout&lt;&lt;map[_zeile][_spalte]&lt;&lt;&quot;; &quot;;
					if(_spalte &lt; sizeX-1)
						_spalte++;
				}
			}
			if(_zeile &lt; sizeY-1)
				_zeile++;
		}
		Quelldatei.close();
		return map[0];
	}
}
</code></pre>
<p>wenn ich damit auf die ersten elemente der jeweils 1.,2.,3. zeile zugreife kommt nur beim zugriff auf das 1. element ein guter bzw. richtiger wert heraus.</p>
<pre><code class="language-cpp">float *map = loadMap(&quot;hMap3.txt&quot;, 16, 16);
	std::cout&lt;&lt;map[0]&lt;&lt;&quot; &quot;&lt;&lt;map[16]&lt;&lt;&quot; &quot;&lt;&lt;map[32]&lt;&lt;std::endl;
</code></pre>
<p>ich verstehe nicht was da nicht passt!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1517292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1517292</guid><dc:creator><![CDATA[flush_]]></dc:creator><pubDate>Mon, 26 May 2008 23:47:15 GMT</pubDate></item><item><title><![CDATA[Reply to pointerrückgabe führt zu fehler! on Tue, 27 May 2008 00:29:34 GMT]]></title><description><![CDATA[<p>du kannst dich glücklich schätzen, dass du überhaupt einen gültigen wert bekommst.<br />
map ist eine lokale variable, deren leben mit dem verlassen der funktion endet. du müsstest das array von floats dynamisch allozieren. wenn dir das zu umständlich ist (und das ist es), steig auf <code>std::vector</code> um.<br />
by the way: auch dein dateistream (Quelldatei) wird am ende der funktion destruiert, d.h. du musst nicht manuell close aufrufen. das erledigt der destruktor für dich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1517301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1517301</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Tue, 27 May 2008 00:29:34 GMT</pubDate></item></channel></rss>