我从 C++ 调用一个 Fortran 77 函数,它传递一个文件句柄、一个字符串和长度。文件成功打开,Fortran 子例程退出。但是,在 C++ 代码中,传递给 fortran 的字符串已损坏。当到达函数 openFile 的底部时,程序崩溃。
崩溃仅出现在发布中,而不出现在调试中。绘制字符串,我看到在 release 变量 fileNameToFortran 中充满了垃圾。
谢谢你的帮助
我在发行版(Windows 7 机器(32 位))中使用带有以下编译器标志的 ifort: /names:lowercase /f77rtl /traceback /iface:cref /threads /recursive /LD
并在调试中: /names:lowercase /f77rtl /traceback /iface:cref /threads /recursive /LDd /Zi /debug:full /check:all /traceback
这是C代码:
typedef void (FORTCALL *sn_openfile_func) (int *,
char[],
int *,
int);
void openFile(const int fileHandle, const std::string fileName)
{
int fileHandleToFortran = fileHandle;
char fileNameToFortran[20];
assert(fileName.size() < 20);
strcpy(fileNameToFortran, fileName.c_str());
int lstr = strlen(fileNameToFortran);
openfile_func_handle(&fileHandleToFortran, fileNameToFortran, &lstr, lstr);
}
这是 Fortran 代码:
SUBROUTINE SN_OPENFILE(FILENR,FILENAME,FSIZE)
!DEC$ ATTRIBUTES DLLEXPORT :: SN_OPENFILE
IMPLICIT NONE
INTEGER FILENR, FSIZE
CHARACTER FILENAME*FSIZE
OPEN (FILENR,FILE = FILENAME,
& ACCESS = 'SEQUENTIAL' , STATUS = 'REPLACE', ERR=222)
GOTO 333
222 WRITE(*,*) 'Error opening file'
333 END