除以零会导致Borland C++中的内存泄漏

nom*_*ian 5 c++ windows c++builder-6 borland-c++

我只是在Borland C++ Builder Version 6中运行以下代码;

for (int i = 0; i < 40000; i++)
{      
   try {
     __int64 n = 0;
     __int64 r = 1 / n;
   }
   catch (Exception& e) {}
}
Run Code Online (Sandbox Code Playgroud)

在运行这个循环时,我在任务管理器(Memory列)中看到它正在泄漏内存.知道为什么吗?

我在项目中计算模块时遇到内存泄漏,当我尝试除以零并且在打了几个小时后在内存泄漏的地方,我意识到它在上述简单循环中泄漏了内存.在项目中没有发现任何问题.

Mar*_*k B 4

从标准 5/4 中我们得知:

如果在计算表达式期间,结果未在数学上定义或不在其类型的可表示值范围内,则行为未定义。

因此,由于除以零没有在数学上定义,因此行为是未定义的。未定义的行为包括内存泄漏,因此实际上不值得进一步推测它泄漏内存的原因(尽管像 valgrind 这样的工具可能能够帮助您识别源)。

  • Valgrind 不能在 Windows 上运行。并且相关编译器不遵守该标准。该问题没有询问标准。这个问题非常具体地询问一个特定的编译器。对于所讨论的编译器,整数除以 0 的结果会引发异常。 (3认同)