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列)中看到它正在泄漏内存.知道为什么吗?
我在项目中计算模块时遇到内存泄漏,当我尝试除以零并且在打了几个小时后在内存泄漏的地方,我意识到它在上述简单循环中泄漏了内存.在项目中没有发现任何问题.
从标准 5/4 中我们得知:
如果在计算表达式期间,结果未在数学上定义或不在其类型的可表示值范围内,则行为未定义。
因此,由于除以零没有在数学上定义,因此行为是未定义的。未定义的行为包括内存泄漏,因此实际上不值得进一步推测它泄漏内存的原因(尽管像 valgrind 这样的工具可能能够帮助您识别源)。
| 归档时间: |
|
| 查看次数: |
500 次 |
| 最近记录: |