我已经使用f2c转换器(f2c)将一些遗留的Fortran代码转换为C语言,并在Windows7(64位)上创建了一个Visual Studio10解决方案。我还必须将我的C++程序(test.cpp,包含我的主函数)与f2c库(使用nmake在我的系统上构建)链接起来。
程序会运行,但一旦到达main函数的末尾,我就会收到以下Debug错误:
Stack around the variable 'qq' was corrupted
Stack around the variable 'pf' was corrupted
Stack around the variable 'ampls' was corrupted我想知道这是否可能是由于f2c转换器在转换后的C(从Fortran)文件中所做的“更正”:
/* Parameter adjustments */
--x1;
--xabs;
--ximag;
--xreal;
--work4;
--work3;
--work2;
--work1;
--ampls;
--pf;
--qq;
--tri;这看起来有点奇怪,因为所有这些变量都是C数组,我认为f2c程序只是做了一些指针运算,使得数组中的索引0变成了索引1,这与Fortran类似。
我不知道这是否也是由于转换后的代码访问未分配的数组元素时出错所致。
调试和修复此错误的最佳方法是什么?
发布于 2012-05-23 00:33:33
潜在原因:
ptr = 0、ptr = 55、指向已删除(已释放;或已释放)内存或任何无效地址)在我看来,调试你的错误的最好方法是一步一步地调试你的程序,并观察那些指针值。它们一定是出了什么问题。
发布于 2012-05-23 01:33:59
你说的可能是真的。我建议创建一个非常小的程序,它使用一个数组并完全像f2c一样递减指针。就像这样
int aa[10];
int *pa = aa;
--pa;
pa[1] = ...也就是说,在小范围内测试可疑代码。您可以这样找出问题的原因。(找到解决方法是另一回事)
发布于 2012-05-24 23:23:19
您正在使用crt的调试版本进行编译吗?这可能会给你提供更多的信息。
另外,有没有可能你的库是用C构建的,而你的应用程序是用C++写的?
您提到的那些错误有时是由于不同的调用约定造成的。你确实声明它是一个64位的应用程序,所以它不应该是一个问题(所有的64位应用程序都使用相同的调用约定),但它值得一看。
是否可以将所有fortran转换后的代码添加到visual studio中,而不进行单独的make?
https://stackoverflow.com/questions/10704625
复制相似问题