Wertzuweisung in einem Array

Schnelle objektorientierte, kompilierende Programmiersprache.
LadyBird
Beiträge: 24
Registriert: So Jul 31, 2011 8:12 pm

Wertzuweisung in einem Array

Beitrag von LadyBird » Di Okt 30, 2012 2:33 pm

Hallo!

In einer Funktion möchte ich Werte aus einem Array P in ein Array Pn kopieren.

Code: Alles auswählen

int poisson(float** P,
            float** RHS,
            float** U,
            float** V,
            int imax,
            int jmax,
            float delX,
            float delY,
            float eps,
            int itermax,
            float omg,
            float res)
{
    for(int i = 1; i <= imax; i++)
    {
        for(int j = 1; j <= jmax; j++)
        {
            P[0][j] = P[1][j];
            P[imax+1][j] = P[imax][j];
            P[i][0] = P[i][1];
            P[i][jmax+1] = P[i][jmax];
        }
    }
    float Pn[imax][jmax][itermax];
    for(int i = 1; i <= imax; i++)
    {

        for(int j = 1; j <= jmax; j++)
        {
            Pn[i][j][1] = P[i][j];
        }
    }
}
Dies funktioniert aber nur bis i den Wert 50 erreicht hat und j den Wert 7. Als Test habe ich versucht, Pn[50][6][1] einen beliebigen Wert zuzuweisen, was kein Problem ist. Wenn ich das selbe mit Pn[50][7][1] versuche, erhalte ich den Fehler "segmentation fault(core dumped)". Wie kann das sein und wie kann ich es ändern?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Wertzuweisung in einem Array

Beitrag von Xin » Di Okt 30, 2012 2:37 pm

jmax ist 7. Das Array geht von j=1 bis j=7. C zählt von 0 bis 6, da passt 7 nicht mehr rein.
Das gleiche Problem hast Du offenbar mit i auch, wenn imax 50 ist.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

LadyBird
Beiträge: 24
Registriert: So Jul 31, 2011 8:12 pm

Re: Wertzuweisung in einem Array

Beitrag von LadyBird » Di Okt 30, 2012 2:50 pm

imax und jmax ist 50.
Wieso wird mit Pn[50][6][1] dann ein richtiger Wert ausgegeben? Ich hatte denselben Fehler vermutlich auch an anderen Stellen gemacht Wieso hat das da gut funktioniert?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Wertzuweisung in einem Array

Beitrag von Xin » Di Okt 30, 2012 2:56 pm

LadyBird hat geschrieben:imax und jmax ist 50.
Wieso wird mit Pn[50][6][1] dann ein richtiger Wert ausgegeben? Ich hatte denselben Fehler vermutlich auch an anderen Stellen gemacht Wieso hat das da gut funktioniert?
Weil Du zwar in Speicherbereiche schreibst, die Dir nicht gehören, das OS aber häufig geringfügig größere Bereiche zur Verfügung stellt als Du anforderst.
Der Code ist falsch, funktioniert aber. Dass das OS größere Bereiche anfordert, garantiert Dir aber keiner. Manchmal klappt, manchmal nicht. Bei [50][7] klappt's wohl nicht.
Damit es garantiert klappt musst Du Dich bei einem Array von 'int a[7]' immer von a[0] bis a[6] bewegen, a[7] ist tabu.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

LadyBird
Beiträge: 24
Registriert: So Jul 31, 2011 8:12 pm

Re: Wertzuweisung in einem Array

Beitrag von LadyBird » Di Okt 30, 2012 3:46 pm

Vielen Dank für die schnelle Antwort. :)
ich habe das Array größer gemacht und damit hatte sich das Problem dann auch erledigt.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Wertzuweisung in einem Array

Beitrag von Xin » Di Okt 30, 2012 3:50 pm

LadyBird hat geschrieben:Vielen Dank für die schnelle Antwort. :)
ich habe das Array größer gemacht und damit hatte sich das Problem dann auch erledigt.
Vielleicht solltest Du besser Deine Indizes anpassen... ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

LadyBird
Beiträge: 24
Registriert: So Jul 31, 2011 8:12 pm

Re: Wertzuweisung in einem Array

Beitrag von LadyBird » Mi Okt 31, 2012 1:23 pm

Wieso?
Es geht um ein bestimmtes Feld, in dem eine Strömung simuliert werden soll. Das Feld P stellt den Druck dar. Das zu betrachtende Feld hat die Größe imax und jmax. Außerdem hat es ein Randgebiet, das bedeutet, ich hätte das Feld von Anfang an mit der Größe imax+2 und jmax+2 anlegen sollen. Das Feld Pn dient nur zur Berechnung, weil in dem Schritt der Druck auch noch vom Iterationsschritt abhängig ist. Trotzdem müsste es doch dann genau so groß sein wie P, oder?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Wertzuweisung in einem Array

Beitrag von Xin » Mi Okt 31, 2012 2:04 pm

LadyBird hat geschrieben:Wieso?
Wenn ich dich richtig verstehe, bleiben die 0-Indizes nun immer unbenutzt!?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

LadyBird
Beiträge: 24
Registriert: So Jul 31, 2011 8:12 pm

Re: Wertzuweisung in einem Array

Beitrag von LadyBird » Mi Okt 31, 2012 2:09 pm

Xin hat geschrieben:
LadyBird hat geschrieben:Wieso?
Wenn ich dich richtig verstehe, bleiben die 0-Indizes nun immer unbenutzt!?
Nein, später in der Funktion gibt es eine Gleichung in der mit Pn[j-1][it] usw. gerechnet wird. Wenn j in der for-Schleife dann 1 ist, wäre das ja dann 0.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Wertzuweisung in einem Array

Beitrag von Xin » Mi Okt 31, 2012 2:28 pm

LadyBird hat geschrieben:
Xin hat geschrieben:
LadyBird hat geschrieben:Wieso?
Wenn ich dich richtig verstehe, bleiben die 0-Indizes nun immer unbenutzt!?
Nein, später in der Funktion gibt es eine Gleichung in der mit Pn[j-1][it] usw. gerechnet wird. Wenn j in der for-Schleife dann 1 ist, wäre das ja dann 0.

Dann ist Pn[j-1][it] sauber initialisiert?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten