cadman Geschrieben 5. Dezember 2010 Geschrieben 5. Dezember 2010 hallo, warum verhält sich die variable i im folgenden code so komisch ? sie sollte jeweils eigentlich um 1 erhöht werden, erhöht sich bei mir aber um 1millionirgendwas. wenn ich double sum[1]; zu double sum[2]; ändere klappt alles. bin anfänger und deswegen für eine klärung sehr dankbar. #include <cstdlib> #include <iostream> #include <math.h> #include <stdio.h> using namespace std; // Schwerpunkt einer Punktschar // pn=Anzahl der Punkte void fc_splist(double feld[][2], int pn) { int i=0; double sum[1]; sum[0]=0, sum[1]=0; for (i=0; i<pn; i++) { cout << "\ni: " << i; sum[0]=sum[0]+feld[0]; sum[1]=sum[1]+feld[1]; }//for sum[0]=sum[0]/pn; sum[1]=sum[1]/pn; cout << "\nxs:" << sum[0] << " ys:" << sum[1] << "\n"; cout << "\ni: " << i; } int main() { double b [3][2]={ {1,2}, {3,4}, {10.9,12.3} }; fc_splist(b,3); system("PAUSE"); return 1; } Zitieren
Klotzkopp Geschrieben 5. Dezember 2010 Geschrieben 5. Dezember 2010 double sum[1];Damit deklarierst du ein Array mit einem Element, nämlich sum[0]. Auf sum[1] darfst du mit dieser Deklaration gar nicht zugreifen. Zitieren
cadman Geschrieben 5. Dezember 2010 Autor Geschrieben 5. Dezember 2010 und warum hat es einfluss auf i ? Zitieren
Klotzkopp Geschrieben 5. Dezember 2010 Geschrieben 5. Dezember 2010 warum nicht ?Weil es ein Array mit nur einem Element ist. sum[2] wäre das zweite Element. Wenn dein Array kein zweites Element hat, darfst du nicht darauf zugreifen. Wenn du ein Array als "typ name[x]" deklarierst, dann ist der größte erlaubte Index für den Zugriff x-1, nicht x. und warum hat es einfluss auf i ? Dein Code erzeugt undefiniertes Verhalten, insofern ist es ziemlich sinnlos, sich darüber Gedanken zu machen, was passiert, weil alles passieren könnte. Der Code könnte sogar funktionieren. Tatsächlich wird es wohl so sein, dass i im Speicher hinter sum liegt. Indem du auf sum hinter dessen Ende zugreifst, pfuschst du im Speicherbereich von i herum. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.