分配内存并将其分配给指针C ++

时间:2012-05-18 11:51:02

标签: c++ pointers

如果我这样做有什么区别

  int *i = new int;
  *i = 5;
  *(i+1) = 20;

  int *i2 = new int [2];
  i2[0] = 5;
  i2[1] = 20;

我可以以相同的方式访问和使用这两个指针,但这两个示例之间的区别是什么,如果我没有分配足够的内存,可能会出现什么错误,如第一个示例中所示?

5 个答案:

答案 0 :(得分:2)

区别在于第一个调用未定义的行为。任何事情都可能发生,包括程序崩溃或数据损坏,甚至只是“工作”。

答案 1 :(得分:2)

第一个选项写入尚未分配的内存。这可能会导致不可预测的行为,例如崩溃。

答案 2 :(得分:0)

在第一种情况下,我们为一个整数分配了内存。所以我们不能做*(i + 1),它将移动到下一个具有未定义行为的位置,即它可能会立即或稍后崩溃。

在后面的例子中,我们为两个整数分配内存。

答案 3 :(得分:0)

最可能的事情是数据损坏,但通常是未定义的。

答案 4 :(得分:0)

您访问的元素没有区别。语法*(i+1)(指针表示法)和i[1](数组元素访问表示法)是相同的。在这种情况下,您可以将指针和数组视为等效(因此访问同一元素的两种方式)

正如其他人所提到的,如果您(尝试)访问尚未正确分配的内存,您将有未定义的行为。