【发布时间】:2012-09-20 06:59:06
【问题描述】:
以下代码不会引发异常并打印“成功”。为什么?
#include <iostream>
int main()
{
size_t size = size_t(1024)*1024*1024*1024*1024*1024*1024*1024;
char* data = new char[size];
if (data == NULL)
std::cout << "fail" << std::endl;
else
std::cout << "success" << std::endl;
return 0;
}
- 编译器:g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
- 操作系统:Ubuntu 12.04
- 内存:8 GB
如果这就是它的工作方式,我如何检查我是否有足够的内存?
[编辑: 让我的愚蠢代码更正确一些,现在如果我删除两个 *1024]
【问题讨论】:
-
提示:整数溢出
-
无论如何,这个程序永远不会打印
"fail",因为new在失败时不会返回空指针。它会抛出std::bad_alloc。 -
@valdo 这个程序不会覆盖任何东西。
-
不得不说,虽然我的第一反应是一脸懵逼,但这个问题还是把我逗笑了。它显示了研究努力的事实意味着我会支持它。标题本身就是点击诱饵的一个很好的例子。
-
@Mysticial:自从我阅读了您的第 1 条评论后,我已经做了大约 2^80 次面部护理,并且笑得很开心。我想,这是我作为 C++ 开发人员的第 14 天这一事实可以给我一些借口。
标签: c++ memory-management