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; }
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.
cadman Geschrieben 5. Dezember 2010 Autor Geschrieben 5. Dezember 2010 und warum hat es einfluss auf i ?
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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden