int *p;
while(true)
{
p = new int;
}
由于内存空间不足,这段代码不应该崩溃。我已经尝试打印出 p 的值,即 p 所在的内存地址,它似乎在增加但没有崩溃。
为什么会这样?
最佳答案
此解决方案就像试图以 1MPH 的速度行驶时撞到街道上的电线杆上的汽车。它最终会发生,但如果你想要快速的结果,你需要稍微加快速度。
int *p;
while (true) {
p = new int[1024*1024*1024];
}
不过,我的回答是基于您使用标准 STL 分配器的代码库,该分配器会引发内存分配失败。还有其他可用的分配器,它们在分配失败时简单地返回 NULL
。这种类型的分配器永远不会在此代码中崩溃,因为失败的分配不被认为是致命的。您必须检查 NULL
的分配返回以检测错误。
另一个警告,如果您在 64 位系统上运行,由于地址空间的大小增加,这可能需要相当长的时间才能崩溃。电话民意调查不是在大街上进行,而是在全国范围内进行。
关于c++ - 这段代码不应该崩溃吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4017343/