Hi,
ich soll in Fortran programmieren, kriege aber den folgenden Fehler:
*** glibc detected *** malloc(): memory corruption (fast): 0x000000000052d8b0 *** Aborted
Wonach muss ich suchen?
Konkret habe ich ein eine Funktion
function differences2 (x,z,offsets) result(y) real(kind=dr),dimension(1:,1:),intent(in) :: x,z real(kind=dr),dimension(1:3,1:size(x,2),1:size(z,2)) :: y real(kind=dr),dimension(1:3),intent(in) :: offsets integer i,j print *,offsets print *,shape(offsets) print *,x print *,shape(x) print *,y print *,shape(y) print *,z print *,shape(z) y=1 do i=1,size(x,2) print *,'i=',i do j=1,size(z,2) print *,'j=',j ! do k=1,3 ! print * print *,i,j print *,shape(x) print *,shape(y) print *,shape(z) print *,x(:,i) print *,y(:,i,j) print *,z(:,j) print *,offsets ! print *,x(k,i) ! print *,z(k,j) ! y(k,i,j) = x(k,i) - z(k,j) - offsets(k) y(:,i,j) = x(:,i) print *,'x: ok' y(:,i,j) = y(:,i,j) - z(:,j) print *,'z: ok' y(:,i,j) = y(:,i,j) - offsets print *,'offsets: ok' ! print *,y(k,i,j) ! print *,shape(offsets) ! print *,i,j,k,offsets(k) ! end do end do print *,'next i',size(x,2) end do print *,offsets end function differences2
der übergebe ich eingeschränkte Arrays. Das klappt soundsolange gut, aber irgendwann steigt er aus. Ungefähr nach 23 von 35 aller Schleifendurchläufe der äußeren Schleife. Die Fehlermeldung scheint etwas hinterherzuhinken. Scheint aber an der Zuweisung an y zu liegen.
Am 09.05.2006 um 10:36 schrieb Tobias Schlemmer:
ich soll in Fortran programmieren, kriege aber den folgenden Fehler:
*** glibc detected *** malloc(): memory corruption (fast):
0x000000000052d8b0 *** Aborted
Wonach muss ich suchen?
Du hast ne Speicheradresse, das hilft. Kleb mal am Anfang der Funktion
print *, LOC(x),LOC(z),LOC(y)
ein (vor oder nach "print *, offsets"), da findest Du mit etwas Glück schonmal raus, welche Variable es ist.
Eher allgemeiner Natur: dadurch, daß es nur ab und zu passiert: hast Du schonmal über Eingabe-Werte meditiert, die das Programm nicht abkann?
HTH, Sebastian
lug-dd@mailman.schlittermann.de