<?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[Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe heute in meinem Code ein Problem festgestellt und weiß ehrlich gesagt nicht, woran es liegt. Und zwar habe ich ein Array A, welches insgesamt 1000 double-Werte aufnehmen kann (werden aus einer *.csv ausgelesen). Das klappt auch alles so wie gewünscht.</p>
<p>In der nachfolgenden Berechnung werden nun jedoch immer nur Gruppen von 10 Zahlen benötigt (Indizes 0-9, 10-19 etc. aus dem Array A). Daher werden diese double-Werte in ein Array B mit der Länge 10 eingefügt und an eine Funktion übergeben. Nach dem ersten Aufruf der Funktion zum weiteren Rechnen mit dem Array B und der Rückgabe der berechneten Werte an die aufrufende Funktion ist jedoch das Array A verändert (an min. einer Position (aufgefallen ist es mir an der Position 12) ist eine 0.0 anstatt der ursprünglichen Zahl zu finden). Dies kann ich mir ehrlich gesagt gar nicht erklären, bin hier echt ratlos, woran das liegen könnte. Schließlich wird das Array A gar nicht übergeben, sondern dient lediglich als Datenspeicher.</p>
<p>Kann mir hier jemand weiterhelfen? Das wäre wirklich sehr hilfreich!</p>
<p>Vielen Dank im Voraus!!</p>
<p>Viele Grüße<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/278179/nach-funktionsaufruf-ursprünglicher-arrayinhalt-verändert</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 13:47:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278179.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Dec 2010 14:18:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 14:18:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe heute in meinem Code ein Problem festgestellt und weiß ehrlich gesagt nicht, woran es liegt. Und zwar habe ich ein Array A, welches insgesamt 1000 double-Werte aufnehmen kann (werden aus einer *.csv ausgelesen). Das klappt auch alles so wie gewünscht.</p>
<p>In der nachfolgenden Berechnung werden nun jedoch immer nur Gruppen von 10 Zahlen benötigt (Indizes 0-9, 10-19 etc. aus dem Array A). Daher werden diese double-Werte in ein Array B mit der Länge 10 eingefügt und an eine Funktion übergeben. Nach dem ersten Aufruf der Funktion zum weiteren Rechnen mit dem Array B und der Rückgabe der berechneten Werte an die aufrufende Funktion ist jedoch das Array A verändert (an min. einer Position (aufgefallen ist es mir an der Position 12) ist eine 0.0 anstatt der ursprünglichen Zahl zu finden). Dies kann ich mir ehrlich gesagt gar nicht erklären, bin hier echt ratlos, woran das liegen könnte. Schließlich wird das Array A gar nicht übergeben, sondern dient lediglich als Datenspeicher.</p>
<p>Kann mir hier jemand weiterhelfen? Das wäre wirklich sehr hilfreich!</p>
<p>Vielen Dank im Voraus!!</p>
<p>Viele Grüße<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988561</guid><dc:creator><![CDATA[Michael_1983]]></dc:creator><pubDate>Wed, 01 Dec 2010 14:18:18 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 14:22:34 GMT]]></title><description><![CDATA[<p>Etwas Code wäre zur Verdeutlichung sehr hilfreich <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/1988562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988562</guid><dc:creator><![CDATA[*-BootLag-*]]></dc:creator><pubDate>Wed, 01 Dec 2010 14:22:34 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 14:24:01 GMT]]></title><description><![CDATA[<p>Wie so oft gilt:<br />
Kein Code --&gt; Antwort schwer <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>Will heissen, dass es schwer ist das Problem zu lokalisieren, wenn kein Code präsentiet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988563</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Wed, 01 Dec 2010 14:24:01 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 14:25:16 GMT]]></title><description><![CDATA[<p>Wahrscheinlich übergibst du nur einen Zeiger auf die Daten, wo du die Daten übergeben willst.</p>
<p>PS. Es ist übrigens immer sehr hilfreich die betreffende Code-Stelle mit in den Beitrag zu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988564</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Wed, 01 Dec 2010 14:25:16 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 14:30:47 GMT]]></title><description><![CDATA[<p>Prinzipiell geht das. Du musst uns schon den Code zeigen, mit dem du das machst.</p>
<p>Weil ich aber C++ und vor allem die STL mag, hier noch eine alternative Variante deiner Funktion:</p>
<pre><code class="language-cpp">template &lt;typename Iterator&gt;
void process_tenner(Iterator first, Iterator last)
{
  ... // hier wird mit den iteratoren gerechnet
}

for (vector&lt;TYP&gt;::const_iterator it=vec.begin(), end=vec.end(); it &lt; end; it+=10)
  process_tenner(it, end);
</code></pre>
<p>Weil ein const_iterator übergeben wird ist quasi ausgeschlossen, dass etwas verändert wird und ausserdem geht das mit allen Arrays (std::vector, std::list, boost::array, C-Array, ...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988568</guid><dc:creator><![CDATA[m.array]]></dc:creator><pubDate>Wed, 01 Dec 2010 14:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 14:52:22 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Erst einmal vielen Dank für die Antworten. Prinzipiell sieht meine Funktion genauso aus wie nachfolgend dargestellt:</p>
<pre><code>int main(int argc, char** argv)
{
	const int anzahl=1000;
	const int anzahl_gruppe=10;
	int j;
	int i;
	double daten[anzahl]; //Erzeugen des Datenarrays
	double daten_gruppe[anzahl_gruppe]; //Erzeugen des Arrays für jeweils 10 benachbarte Werte
	daten_einlesen(daten,anzahl); //Aufrufen der Funktion zum Einlesen der Daten
	double berechnungsergebnis[anzahl_gruppe];
	//Deklaration weiterer Variablen

	for(j=0;j&lt;anzahl-anzahl_gruppe;j=j+anzahl_gruppe) //Subtraktion erforderlich zum Einhalten der Arraygrenzen
	{
		for(i=0;i&lt;anzahl_gruppe;i++)
		{
			daten_gruppe[i]=daten[j+i]; //Kopieren der Werte aus dem Datenarray in das kleinere Array
		}
		//nachfolgend wird die Funktion zur Berechnung aufgerufen
		berechnungen_durchfuehren(berechnungsergebnis,daten_gruppe);

		//weitere Anweisungen mit dem Array berechnungsergebnis

	}
}
</code></pre>
<p>.</p>
<p>Vielleicht hilft es ja beim Verständnis. Letztendlich werden also Werte im Array &quot;daten&quot; verändert, obwohl dies nicht an die Funktion übergeben wird.<br />
Auf jeden Fall noch einmal vielen Dank für die Mühe &amp; Arbeit!!</p>
<p>Viele Grüße<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988575</guid><dc:creator><![CDATA[Michael_1983]]></dc:creator><pubDate>Wed, 01 Dec 2010 14:52:22 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 15:03:07 GMT]]></title><description><![CDATA[<p>Vermutlich schreibt dein Programm ausserhalb der Array-Grenzen.<br />
Schreib mal vor jeden Zugriff auf das übergebene <code>daten_gruppe</code> Array in der Funktion folgendes:</p>
<pre><code class="language-cpp">#include &lt;cassert&gt; // ganz oben im file

//...

assert(n &gt;= 0 &amp;&amp; n &lt; anzahl_gruppe); // wenn anzahl_gruppe hier nicht bekannt ist schreib einfach den entsprechenden wert als konstante hin, 
                                     // ist ja nur zum testen
daten_gruppe[n] = ...
</code></pre>
<p>Dann lass das Programm laufen, und wenn es Bumm macht hast du deinen Fehler gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988579</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 01 Dec 2010 15:03:07 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 15:03:51 GMT]]></title><description><![CDATA[<p>oder man nimmt einfach .at(..).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988584</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 01 Dec 2010 15:03:51 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 15:08:09 GMT]]></title><description><![CDATA[<pre><code>double berechnungsergebnis[anzahl_gruppe];
 ....
    berechnungen_durchfuehren(berechnungsergebnis,daten_gruppe);
</code></pre>
<p>Woher weiß denn <strong>berechnungen_durchfuehren()</strong> an welche Stelle es in <strong>berechnungsergebnis[]</strong> schreiben darf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988586</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Wed, 01 Dec 2010 15:08:09 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 15:27:22 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Vielen Dank für die Antworten! Ich werde das gleich mal ausprobieren und dann hoffentlich zur Lösung kommen bzw. den Fehler finden.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/32185">@DirkB</a>: in der aufzurufenden Funktion läuft wieder eine for-Schleife ab, in der 10 Ergebnisse erzeugt werden. Da die Funktion berechnungen_durchfuehren ein Zeiger auf berechnungsergebnis[] übergeben bekommt, sollte das meiner Meinung nach gehen. Dazu muss ich sagen, dass ich allerdings erst seit kurzer Zeit mit C++ beschäftige (vorher nur Java und dort sind Arrays als Rückgabe kein Problem), muss das auch nicht unbedingt richtig sein <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>Euch noch einen schönen Abend!</p>
<p>Viele Grüße<br />
Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988597</guid><dc:creator><![CDATA[Michael_1983]]></dc:creator><pubDate>Wed, 01 Dec 2010 15:27:22 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 15:37:21 GMT]]></title><description><![CDATA[<blockquote>
<p>... in der aufzurufenden Funktion läuft wieder eine for-Schleife ab, in der 10 Ergebnisse erzeugt werden</p>
</blockquote>
<p>Sorry, da war ich etwas verwirrt. Das passt dann schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1988603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988603</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Wed, 01 Dec 2010 15:37:21 GMT</pubDate></item><item><title><![CDATA[Reply to Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert on Wed, 01 Dec 2010 15:38:53 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>oder man nimmt einfach .at(..).</p>
</blockquote>
<p>Und du meinst das funktioniert?</p>
<pre><code class="language-cpp">double x[100];
double* ptr = x;
ptr.at(101);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1988604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1988604</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 01 Dec 2010 15:38:53 GMT</pubDate></item></channel></rss>