到达主函数结束后发生调试运行时堆栈错误
Debugging runtime stack error occurring once end of main function is reached
我已经使用f2c转换器(f2c(将一些遗留的Fortran代码转换为C,并在Windows 7(64位(上创建了一个Visual Studio 10解决方案。我还必须将我的C++程序(test.cpp,包含我的主要函数(与 f2c 库(使用 nmake 在我的系统上构建(链接起来。
程序运行,但是一旦到达主函数的末尾,我会收到以下调试错误:
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。
我不知道这是否也是由于转换后的代码访问尚未分配的数组元素时出现问题。
调试此错误并修复它的最佳方法是什么?
潜在原因:
- 此错误通常与在数组(动态或静态数组(边界之外写入有关。此错误可以通过在 -ve 索引或索引>= size_of_array中写入\获取值来发生。
- 如果指针未设置为正确的位置,也会发生此错误。(例如
ptr = 0
、ptr = 55
指向已删除(释放;或已释放(的内存或任何无效地址(
在我脑海中调试错误的最佳方法是逐步调试您的 prorgam 并观察这些指针值。他们一定有什么问题。
你说的可能是真的。我建议创建一个非常小的程序,它使用数组并像 f2c 一样递减指针。类似的东西
int aa[10];
int *pa = aa;
--pa;
pa[1] = ...
也就是说,在小规模上测试可疑代码。您可以通过这种方式隔离问题的原因。(寻找解决方法是另一回事(
您是否正在使用 crt 的调试版本进行编译? 这可能会为您提供更多信息。
另外,您的库是否有可能构建为 C 而您的应用程序编写为 C++?
您提到的那些错误有时是由于不同的调用约定。 您确实声明它是一个 64 位应用程序,因此它应该不是问题(所有 64 位应用程序都使用相同的调用约定(,但值得研究。
是否可以将所有 fortran 转换后的代码添加到视觉工作室而不进行单独的制作?
相关文章:
- Visual Studio 2017 - 调试和 Relese 配置,设置运行时库
- 在Visual Studio中运行/调试C ++时,如何在结束时等待输入
- 运行时检查失败 #2 MSVC 仅使用 utf8proc 进行调试
- C++ - 调试和运行时 Eclipse 行为不同
- 在集成终端上运行vscode lldb调试器时,如何获取程序的输出?
- C++,弹出调试断言失败窗口,我得到矢量迭代器不兼容的错误运行时
- 函数在正常运行时不起作用,但在调试时起作用
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- C++应用程序仅在使用本地 Windows 调试器时运行,而不是哪个 exe 文件
- 程序.exe在Cygwin上运行,但在视觉工作室进行调试和运行时给出了例外
- 调试运行时出现奇怪的崩溃程序(Eclipse C++)
- SIGABRT 运行时何时出现错误以及如何在这种情况下进行调试
- 运行绿山调试器时的幻像输入
- Rcpp中调试运行时错误
- OCCI C++应用程序的Visual Studio调试运行时错误
- 到达主函数结束后发生调试运行时堆栈错误
- 如何调试c++运行时错误
- 切换到非调试运行时/MT会导致链接错误
- Visual Studio 2013在Visual Studio 2015中使用QtAddIn调试运行时
- 在VS2010中没有调试运行时,发布版本无法工作