Fortran 中打印语句的缓冲区溢出
Buffer overflow from print statement in fortran
我正在尝试为我自己的项目编辑一个旧的 Abaqus 用户子程序。我正在尝试使用 print 语句调试一些分段错误(在大学计算机上,代码需要来自 abaqus 的输入,因此无法使用适当的调试器),但是,当我使用 print 语句时,它会中止并显示一条消息:*** buffer overflow detected ***: *path* terminated
.
前几次(可能是 5 次?)我今天早上 运行 它实际上按预期工作和打印,但后来停止了。我试过使用 call flush(6)
来清除缓冲区,但这没有帮助。我应该使用不同的单位吗?或者以不同的方式清除缓冲区?还是完全不同?
我是 Fort运行 的新手,只有一般的编程经验,所以请就此问题提出任何建议!
这是我的代码的相关部分:
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
1 RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,TIME,DTIME,
2 TEMP,DTEMP,PREDEF,DPRED,CMNAME,NDI,NSHR,NTENS,
3 NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,CELENT,
4 DFGRD0,DFGRD1,NOEL,NPT,KSPT,KINC)
INCLUDE 'ABA_PARAM.INC'
CHARACTER*80 CMNAME
DIMENSION STRESS(NTENS),STATEV(NSTATV),
1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
3 PROPS(NPROPS),COORDS(3),DROT(3,3),
4 DFGRD0(3,3),DFGRD1(3,3)
dt = DTIME
print *, "TEMP", TEMP
注意:我相信这是使用堡垒运行 90 和英特尔 2020
事实证明,使用 write(6, *) "TEMP: ", TEMP
可以满足我的需要,而不会出现缓冲区溢出,这对我来说已经足够了
我正在尝试为我自己的项目编辑一个旧的 Abaqus 用户子程序。我正在尝试使用 print 语句调试一些分段错误(在大学计算机上,代码需要来自 abaqus 的输入,因此无法使用适当的调试器),但是,当我使用 print 语句时,它会中止并显示一条消息:*** buffer overflow detected ***: *path* terminated
.
前几次(可能是 5 次?)我今天早上 运行 它实际上按预期工作和打印,但后来停止了。我试过使用 call flush(6)
来清除缓冲区,但这没有帮助。我应该使用不同的单位吗?或者以不同的方式清除缓冲区?还是完全不同?
我是 Fort运行 的新手,只有一般的编程经验,所以请就此问题提出任何建议!
这是我的代码的相关部分:
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
1 RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,TIME,DTIME,
2 TEMP,DTEMP,PREDEF,DPRED,CMNAME,NDI,NSHR,NTENS,
3 NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,CELENT,
4 DFGRD0,DFGRD1,NOEL,NPT,KSPT,KINC)
INCLUDE 'ABA_PARAM.INC'
CHARACTER*80 CMNAME
DIMENSION STRESS(NTENS),STATEV(NSTATV),
1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
3 PROPS(NPROPS),COORDS(3),DROT(3,3),
4 DFGRD0(3,3),DFGRD1(3,3)
dt = DTIME
print *, "TEMP", TEMP
注意:我相信这是使用堡垒运行 90 和英特尔 2020
事实证明,使用 write(6, *) "TEMP: ", TEMP
可以满足我的需要,而不会出现缓冲区溢出,这对我来说已经足够了