int * myFun(const int & a)
{
int * c = new int(a);
int b = *c;
return &b;
}
1.如何解释(const int & a)
和new int (a)
,它有什么作用?如何解释(const int&a)和新的int(a),它有什么作用?
2.你能告诉我为什么有内存泄漏?
int * myFun(const int & a)
{
int * c = new int(a);
int b = *c;
return &b;
}
1.如何解释(const int & a)
和new int (a)
,它有什么作用?如何解释(const int&a)和新的int(a),它有什么作用?
2.你能告诉我为什么有内存泄漏?
的代码来看,你使用的是C++
你得到一个新的指针c
与你做b
的的a
然后值,用相同的值c
,返回b
,留下c
的泄漏,因为没有什么指向c
了。
在然后结束:
a
是常量b
是c
值,这是a
c
值的指针到一个新的变量不再被引用在你的代码好点。非常好的一点。编辑:) –
你可能想要从The Definitive C++ Book Guide and List挑选一本初学者书籍,阅读并重新开始。
在您的问题:
const int & a
是一个常量引用的int
,命名为a
。基本上,这意味着某个地方指向另一个int变量,其行为与int相同,但不能更改它的值
new int (a)
表示您在堆的某处为某个int变量动态分配内存,并初始化那个值为a
的变量。该表达式返回刚创建的变量的地址
为什么会出现内存泄漏?您使用new int(a)
语句分配内存,但从不释放它。
delete c;
你的函数结束之前:这应该与完成。因为你返回一个局部变量的地址(你可能需要真正阅读C++初学者书来理解它的含义),正如注释中所指出的那样,这个函数在return语句中有未定义的行为。
这是哪一种语言? –
我添加了C++标签,但如果不是,请将其更改为真正的语言标签。 –
如果您不知道引用是什么,您可能需要向C++咨询介绍性书籍。 – Borgleader