Fortran 堆栈溢出有时会被编译器误解为访问冲突吗?

Fortran 堆栈溢出有时会被编译器误解为访问冲突吗?,fortran,stack-overflow,access-violation,gfortran,intel-composer,Fortran,Stack Overflow,Access Violation,Gfortran,Intel Composer,我有一个在windows 7下用英特尔fortran编译器2013和VS2010编译的fortran代码,它开始给我未处理的异常,而没有显示代码崩溃的那一行。通常会出现这样的错误: Unhandled exception at 0x73e1d3d2 in GRIB2METEOriparto.exe: 0xC0000005: Access violation writing location 0x00240ef4.... 调用堆栈只有dbghelp.dll或verifys.dll,没有可用的源。

我有一个在windows 7下用英特尔fortran编译器2013和VS2010编译的fortran代码,它开始给我未处理的异常,而没有显示代码崩溃的那一行。通常会出现这样的错误:

Unhandled exception at 0x73e1d3d2 in GRIB2METEOriparto.exe: 0xC0000005: Access violation writing location 0x00240ef4....
调用堆栈只有dbghelp.dll或verifys.dll,没有可用的源。 我将源文件移到Cygwin下,使用gfortran编译,打开了所有可能的警告/错误标志(包括检查边界和隐式接口),没有任何警告,程序运行平稳。所有接口都是显式的,因为我使用的是“CONTAINS”。因此,如果参数数量不匹配,调试器将捕获它。不存在未初始化的变量。 我回到VS2010,我做了一个“干净的解决方案”,我重建了这个项目。代码开始在不同的C例程(我没有编写)中崩溃,例如:

代码甚至没有到达可执行代码的第一行(没有到达断点)

我开始评论我最近在过去几天添加的一些代码行,当运行线程最终成功地传递了前几行代码时,它在一个带有stackoverflow错误的子例程调用中崩溃。这最终帮助我理解了这个问题。我有一堆字符声明为character*2560(在子例程和主代码中)。我用字符*256替换了它们,它不再崩溃了。我重写了字符*2560,并在链接选项中添加了标志/堆栈:2000000,现在一切都顺利运行。我删除了在这些代码行中添加的额外注释(即调用带有太多字符*2560的错误子程序),所有操作都运行顺利。我在Cygwin用gfortran重新编译了一切,一切都还不错。这正常吗?我现在安全了吗?最初的堆栈溢出错误是否由于某种原因被错误地解释为访问冲突?可能吗

编辑:这是我在主程序中的错误声明(我在其他子例程中有类似的声明(但更短):


生成一个MCVE底部的描述不够清楚,显示代码!我已经写过,我声明了一堆字符*2650。我在我的代码中添加了声明。我还试图更清楚地重写最后一部分。好的,我尽全力创建了一个最小的示例,但我做不到。任何最小的例子都只会给我堆栈溢出。在我的长代码中,如果我在这里或那里注释或取消注释1行,我将从“访问冲突”错误传递到“堆栈溢出”错误,没有明显的逻辑,或者至少我找不到逻辑。删除所有可执行代码并只保留去极化只会导致堆栈溢出。添加/堆栈:2000000修复了所有可能的错误。我不知道它是否隐藏了其他错误。生成一个MCVE底部的描述不够清楚,显示代码!我已经写过,我声明了一堆字符*2650。我在我的代码中添加了声明。我还试图更清楚地重写最后一部分。好的,我尽全力创建了一个最小的示例,但我做不到。任何最小的例子都只会给我堆栈溢出。在我的长代码中,如果我在这里或那里注释或取消注释1行,我将从“访问冲突”错误传递到“堆栈溢出”错误,没有明显的逻辑,或者至少我找不到逻辑。删除所有可执行代码并只保留去极化只会导致堆栈溢出。添加/堆栈:2000000修复了所有可能的错误。我不知道它是否隐藏了其他错误。
crt0.c at the line:

mainret = _tmain(__argc, _targv, _tenviron);
osinfo.c at line (if I well remember):

EnterCriticalSection( &(_pioinfo(fh)->lock) );
 character*2560   DOScallINV,FORMdosCALLtxt,FORMdosCALLinv,filenam,FILEinv,provSTR,FMTtimeMETEO,&
        TIMEstring,fmtGRID,fmtTIMEstring,FMTdataMETEO,WORKINGdir,path,DIRgribs,PATHgribs,&
        DIRresultsRUN,PATHoutput,previousDIR,filePATH,PATHresultsRUN,PATHinputD3D,textFILE,&
        newLINE,textFILE1,textFILE2,PATHlogs,LOGfile,LOGdir,ilineTXT,message,PATHresultsREST,&
        LastRUNfolder,PATHobs,PATHopenda,PATHresultsRUNm1,workworkWITHnum,pathSTOBS,pathSTMOD,pathALG,&
        toBEfound,COLLECTdirect,COLLECTdirectLOC,PATHwork,filePATHtot,filePATHlong,stringCAL,string,&
        pathNM,filePATH_d3model,CDstring,toBEadded,stringCALini,filePATH_d3wrapper,fileWIND,dudFILE,stringL,stringU,fileWINDcal,&
        PATHweb,pathREGR,fileWEB,PATHfileANALYSIS,threadFILE,threadFILEcopy