Fortran95 programmierung

Hallo,

ich schreibe mit Fortran95 eine Programm, dass das Gaussche Eliminationsverfahren durchführen soll. die Funktion bekommt dabei u.a. die Koeffizientenmatrix als

real, dimension(:,:smile: :: A

übergeben, also mit unbekannter Größe. Sobald ich allerdings auf irgendein Element zugreifen möchte (Z.B. A(1,1)), erhalte ich sofort einen segmentation fault, auch wenn das übergeben array tatsächlich diese Indizes besitzt. Sobald ich die Dimensionen festlege (z.B. dimension(3,3)), funktioniert es plötzlich einwandfrei.

Muss ich hier noch Speicher alloziieren oder woran liegt das?

Wie ermittle ich die Ausmaße der übergebenen Matrix?

Ich hoffe es gibt noch alte Fortran-Veteranen, die mir hier helfen können :smile:

gruß

Frederic

Hallo,

ich schreibe mit Fortran95 eine Programm, dass das Gaussche
Eliminationsverfahren durchführen soll.

Zu Uebungszwecken?
Ich hoffe du weisst, dass es schon genug solcher Programme gibt.

die Funktion bekommt
dabei u.a. die Koeffizientenmatrix als

real, dimension(:,:smile: :: A

übergeben, also mit unbekannter Größe. Sobald ich allerdings
auf irgendein Element zugreifen möchte (Z.B. A(1,1)), erhalte
ich sofort einen segmentation fault,

Jetzt bin ich aber gespannt - wie willst du gaussche Elimination auf einer Matrix unbekannter Groesse durchfuehren?

Die Antwort ist vermutlich „gar nicht“. Also uebergib die Groesse der Matrix als weiteren Parameter.

Ich kenne mich mit Fortran nicht aus, aber in C muss man alle ausser der letzten Groessen der Matrix kennen um drauf zugreifen zu koennen.

Wenn die default-Groesse 0 ist, koennte das gut einen Segfault erklaeren.

(Ansonsten empfehle ich vor allem, dich von Fortran fern zu halten).

Gruesse,
Moritz

Hi,

Zu Uebungszwecken?

ja, zu reinen Übungszwecken, um mich mal mit dem Klassiker Fortran zu beschäftigen.

Jetzt bin ich aber gespannt - wie willst du gaussche
Elimination auf einer Matrix unbekannter Groesse durchfuehren?

die tatsächliche Größe kann natürlich mit der size() Funktion ermittelt werden, ansonsten wäre es ja ein „fischen im trüben“. Aber an fehlenden Grenzen liegt es ja nicht - selbst bei tatsächlich korrekten Indizes bekomme ich den segmentation fault.

(Ansonsten empfehle ich vor allem, dich von Fortran fern zu
halten).

Das werde ich auch, nachdem ich dieses Projekt mal „zum Spaß“ vollendet habe. Produktive Anwendungen schreibe ich eher in C++ oder java.

gruß

Frederic