将整数值分配给堆

时间:2016-01-30 16:56:01

标签: c++

  #include<iostream>
  using namespace std;
  int main() 
  { 
    int i= new int;
    cout<<i;
    return 0;
  }

当我试图将int i值分配给它显示的堆时 错误:来自&#39; int *&#39;的转换无效到&#39; int&#39;

当我为int指针赋值然后它分配给它。为什么我们不能将值赋值给int.Yes我知道尽可能避免赋值给堆。 我看了很多stackoverflow post每个人都解释过关于int * p = new int [10]; 请有人向我解释一下。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:5)

new int返回指向int的指针,即int*。将其分配给int是明显的类型不匹配。

new T返回的指针指向堆a.k.a.免费商店中的内存位置,该商店提供足够的空间来存储T类型的一个对象。 T在这里是一种任意类型。

您的代码可以更改为:

int* ptr = new int;
*ptr = 1;
cout << *ptr;    // prints 1

之后不要忘记 delete

请注意,堆只应用于超出范围边界的动态数据。在你的情况下,它太重量了。只需使用一个好的旧自动变量:

int i = 1;

答案 1 :(得分:1)

new int;

为单个int分配内存,在那里初始化一个int,并为您提供指向该内存的指针。它没有为您提供int,而是指向int的指针,因此int*

你可能只想做

int i = 42;

左右。

编辑

你当然也可以

int* i = new int;

但是你使用它的方式,你不应该这样做。通过new获得的记忆保持分配,直到您delete为止;这意味着如果您使用new而不使用delete,则会对内存泄漏进行编码。

相关问题