PROGRAM DEMODMMS CALL DEMO(50,40,60,60,120,120) STOP END SUBROUTINE DEMO(NI1,NJ1,NI2,NJ2,NI3,NJ3) INTEGER NI1,NJ1,NI2,NJ2,NI3,NJ3 REAL ARRAY1,ARRAY2,ARRAY3 POINTER (PTR1,ARRAY1(NI1,NJ1)) POINTER (PTR2,ARRAY2(NI2,NJ2)) POINTER (PTR3,ARRAY3(NI3,NJ3)) INTEGER I,J,IER EXTERNAL HPALLOC,HPDEALLC,HPCHECK * CALL HPALLOC(PTR1,NI1*NJ1,IER,0) CALL HPALLOC(PTR2,NI2*NJ2,IER,0) CALL HPALLOC(PTR3,NI3*NJ3,IER,0) * DO 150 I = 1,NJ1 DO 100 J = 1,NJ1 ARRAY1(I,J) = 0 100 CONTINUE 150 CONTINUE CALL SUBRXYZ(ARRAY1,ARRAY2,NI1,NJ1,NI2,NJ2) CALL BKCHECK(PTR1,IER) IF (IER .NE. 0) PRINT *,'ERROR, ARRAY1 HAS BEEN OVER INDEXED' * * HERE IS SOME EXPLICIT OVER INDEXING FOR DEMO PURPOSE * DO 250 I=1,NI3+4 DO 200 J = 1,NJ3 ARRAY3(I,J) = ARRAY1(I,J) * ARRAY2(I,J) 200 CONTINUE 250 CONTINUE CALL HPCHECK(IER) CALL HPDEALLC(PTR1,IER,IABT) CALL HPDEALLC(PTR2,IER,IABT) CALL HPDEALLC(PTR3,IER,IABT) RETURN END --------------------------------------------------------------------- f77 demodmms.f demo.f $ARMNLIB/lib/rmnxlib.a a.out # # This run will probably generate an error (due to the over indexing) # of that kind: # block check error: internal pointer destroyed ptbloc=0x10005e38 # --------------------------------------------------------------------- # a subsequent run can use: BAD_POINTER=0x10005e38 export BAD_POINTER a.out ----------------------------------------------------------------------AUTHOR
Mario Lépine - RPNNOTES
The traceback information (given with the use of BAD_POINTER environment variable) can only be obtained on a machine where the traceback system software is available (SX3, SX3r currently).
SEE ALSO
( hpalloc hpdeallc, hpcheck, bkcheck, memoirc, dmmsdbg)