#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]; 请有人向我解释一下。 谢谢你的帮助。
答案 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
,则会对内存泄漏进行编码。