【问题标题】:Customer getting R6002 runtime error when using our app客户在使用我们的应用程序时收到 R6002 运行时错误
【发布时间】:2011-01-20 16:36:37
【问题描述】:

我们有一个使用 Visual C++ 2005 构建的应用程序,一位客户报告说他遇到了这个运行时错误:

Microsoft Visual C++ Runtime Library
Runtime Error!
Program: [path to our application]
R6002
- floating point support not loaded

根据微软(on this page)的说法,可能的原因是:

  • 机器没有 FPU(在这种情况下没有:客户有 Intel Core 2 Duo CPU,我从 486SX 之后就没有见过没有 FPU 的机器)
  • printf 或 scanf 与浮点格式规范一起使用,但程序中没有 FP 变量(我们的应用程序包含 FP 变量,但我很确定我们从未将 printf 或 scanf 与 FP 格式一起使用)
  • 与 FORTRAN 有关(我们的应用中没有 FORTRAN 代码)

此外,错误是在他们使用我们的应用程序时发生的(特别是在他们选择要处理的文件之后),而不是在应用程序启动时发生。

我知道这是一个很长的镜头,但是以前有人在任何地方见过这样的事情吗?谷歌非常没有帮助(有很多不受支持的说法,称这是某种病毒感染的症状,但除此之外几乎没有)。

任何建议都非常感谢:-)

【问题讨论】:

  • 远射 - 针对不同版本的运行时库运行?您的文件处理步骤是否加载具有不同运行时版本的单独 DLL?
  • 我们没有显式加载任何其他 DLL。加载具有不同运行时版本的 DLL 会触发我提到的错误吗?

标签: windows visual-c++ runtime-error


【解决方案1】:

您是否正在链接 CRT 的静态版本?如果是这样,您需要在调用 printf() 的二进制文件中包含浮点变量。并且这些变量必须真正使用(即不被编译器优化)。

另一种可能性是 CRT 初始化和使用这些 FP 例程的代码之间的竞争,但这很难产生。

【讨论】:

  • 是的,我们正在链接 CRT 的静态版本。那里肯定有 FP 变量,它们确实被使用过,而且我找不到任何使用任何带有 FP 格式规范的 printf 变体的实例。如果存在涉及 CRT init 的竞争条件,那不会在应用启动时发生,而不是在流程中途发生吗?
  • 我接受了这个答案,因为它可能对其他人有用,即使它没有直接解决我的问题。
  • @Anodyne:什么(如果有的话)直接解决了你的问题?
【解决方案2】:

R6002 可能是由 printf 尝试打印包含百分号的字符串引起的。 这种 printf 失败的最可能的根本原因是一个操作任意文件并打印其名称的程序。令我惊讶的是,真的有人在文件名中加上百分号! (是的,我知道这在技术上是合法的。)

【讨论】:

  • 这很有趣......大概只有在您使用未经处理的输入作为 printf 的格式字符串时才会发生这种情况?我过去一直被那个烧伤 - 我早就学会了 printf("%s", var) 而不是 printf(var) :-)
【解决方案3】:

printf("%f\n", (float)rand() / RAND_MAX);

我在使用 VS2010 命令行 cl 编译的程序中遇到了相同的运行时错误。 报告的错误发生在 没有 (float) 强制转换的情况下,并且在我添加它时消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 2015-01-29
    • 2014-10-25
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多