c++ - 这段代码不应该崩溃吗

标签 c++ dynamic-memory-allocation new-operator

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/

相关文章:

c++ - 重复的 switch 语句需要重构

c++ - C 检查或转换指数

c++ - 使用函数的 12 天圣诞节 C++

c - malloc 到 "array"指针的元素

C++在函数内分配动态数组

javascript - "new"在 JavaScript 中的作用

c++ - 如何在 C++ 中使用 new 分配内存?

c++ - 语法错误 : unexpected $end at token "<EOF>" GLSL with any shader

c++ - 从函数返回的堆分配

c - 为什么我的程序有内存泄漏?