检查是否已成功创建新阵列 我对C或C++不太了解,但是我认为C创建一个数组时,你使用Maloc来请求内存,然后检查内存分配前的值。在C++中,使用新来实现数组。通过检查数组不是null,检查C++中数组的内存分配是否与C相同?

检查是否已成功创建新阵列 我对C或C++不太了解,但是我认为C创建一个数组时,你使用Maloc来请求内存,然后检查内存分配前的值。在C++中,使用新来实现数组。通过检查数组不是null,检查C++中数组的内存分配是否与C相同?,c++,C++,比如说, int main() { int* myArr = new int[10]; if(myArr!=NULL) { //DO SOMETHING } } 我知道大多数计算机都有很多内存,这使得今天内存不足的可能性降低了,但我也明白,不这样做可能会导致以后出现意想不到的错误 更新:我试图保持我的例子简单。正如在评论中提到的,我指的是动态内存分配。我正在尝试实现一个堆数据结构。作为堆的一部分,存在一个数组来存储堆的值。当

比如说,

int main()
{
      int* myArr = new int[10];
      if(myArr!=NULL)
      {
           //DO SOMETHING
      }
}
我知道大多数计算机都有很多内存,这使得今天内存不足的可能性降低了,但我也明白,不这样做可能会导致以后出现意想不到的错误


更新:我试图保持我的例子简单。正如在评论中提到的,我指的是动态内存分配。我正在尝试实现一个堆数据结构。作为堆的一部分,存在一个数组来存储堆的值。当堆已满时,阵列必须按2的下一次幂进行设计扩展。因此,我可以将堆初始化为10,但当我达到10时,我需要扩展到16。如果有足够的项目,堆的大小将达到2^n。因此,我调用了一个具有堆指针参数的函数。然后创建一个新数组,并将值从现有数组复制到新数组。在执行此操作时,我正在考虑如果由于内存不足而无法创建新阵列会发生什么情况。我可能想在退出之前将值写入文件

否,要制作数组,请执行以下操作:

int main()
{
   int myArr[10];
   // DO SOMETHING
}
如果必须使用动态分配,请在不使用
std::nothrow
说明符的情况下使用
new
,以便在分配失败时抛出
std::bad_alloc
异常。这最终相当于检查
malloc
是否返回空指针


如果确实使用了
std::nothrow
说明符,则可以检查空指针。在现代C++中,这是<代码> null pt> <代码>。在古董C++中,如您所示,这是<代码> null < /C> >(或<代码> 0)/代码> < /p>如果<代码>新< /代码>失败,则抛出异常(除非您告诉它否则)。除非使用“代码> STD::Noojs<代码>,否则,操作符<代码>新< /Calp>会,如果内存不足,则抛出异常。DOC MNITON:相关:实际上,在现代C++中,通常不应该乱用RAW <代码>新< /COD>和<代码> Dele> <代码>,并且在数组的情况下,您通常应该使用<代码> STD::vector < /代码>。(或者
std::array
如果您确信自己事先知道大小,并且不可能需要调整大小。)如果普通
new
表达式失败,它将抛出
std::bad_alloc
异常。您可以通过使用
try catch
来检查这一点,但由于内存耗尽通常是一种致命的情况,因此最好将该异常一直传播到
main
,然后终止。无论如何,为了简单和安全,请使用
std::vector
,而不是通过
new
-表达式分配的原始数组。OP表示动态内存。@Raindrop7:没有理由对10整数的数组使用动态内存。这就是问题所在。问题可能只是试图确定会发生什么,而不是实际代码的示例。@Alexander:那么这是一个糟糕的示例。首先,我推荐
std::vector
(数组可能很大,
std::vector
作为一个常规的默认选择)。否则,我觉得这个建议很好。我不太明白那些反对票。