Nach Funktionsaufruf ursprünglicher Arrayinhalt verändert
-
Wie so oft gilt:
Kein Code --> Antwort schwer
Will heissen, dass es schwer ist das Problem zu lokalisieren, wenn kein Code präsentiet wird.
-
Wahrscheinlich übergibst du nur einen Zeiger auf die Daten, wo du die Daten übergeben willst.
PS. Es ist übrigens immer sehr hilfreich die betreffende Code-Stelle mit in den Beitrag zu schreiben.
-
Prinzipiell geht das. Du musst uns schon den Code zeigen, mit dem du das machst.
Weil ich aber C++ und vor allem die STL mag, hier noch eine alternative Variante deiner Funktion:
template <typename Iterator> void process_tenner(Iterator first, Iterator last) { ... // hier wird mit den iteratoren gerechnet } for (vector<TYP>::const_iterator it=vec.begin(), end=vec.end(); it < end; it+=10) process_tenner(it, end);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, ...)
-
Hallo!
Erst einmal vielen Dank für die Antworten. Prinzipiell sieht meine Funktion genauso aus wie nachfolgend dargestellt:
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<anzahl-anzahl_gruppe;j=j+anzahl_gruppe) //Subtraktion erforderlich zum Einhalten der Arraygrenzen { for(i=0;i<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 } }.
Vielleicht hilft es ja beim Verständnis. Letztendlich werden also Werte im Array "daten" verändert, obwohl dies nicht an die Funktion übergeben wird.
Auf jeden Fall noch einmal vielen Dank für die Mühe & Arbeit!!Viele Grüße
Michael
-
Vermutlich schreibt dein Programm ausserhalb der Array-Grenzen.
Schreib mal vor jeden Zugriff auf das übergebenedaten_gruppeArray in der Funktion folgendes:#include <cassert> // ganz oben im file //... assert(n >= 0 && n < 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] = ...Dann lass das Programm laufen, und wenn es Bumm macht hast du deinen Fehler gefunden.
-
oder man nimmt einfach .at(..).
-
double berechnungsergebnis[anzahl_gruppe]; .... berechnungen_durchfuehren(berechnungsergebnis,daten_gruppe);Woher weiß denn berechnungen_durchfuehren() an welche Stelle es in berechnungsergebnis[] schreiben darf?
-
Hallo!
Vielen Dank für die Antworten! Ich werde das gleich mal ausprobieren und dann hoffentlich zur Lösung kommen bzw. den Fehler finden.
@DirkB: 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
.Euch noch einen schönen Abend!
Viele Grüße
Michael
-
... in der aufzurufenden Funktion läuft wieder eine for-Schleife ab, in der 10 Ergebnisse erzeugt werden
Sorry, da war ich etwas verwirrt. Das passt dann schon.
-
knivil schrieb:
oder man nimmt einfach .at(..).
Und du meinst das funktioniert?
double x[100]; double* ptr = x; ptr.at(101);