2014-02-23 59 views
-1
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.你能告诉我为什么有内存泄漏?

+0

这是哪一种语言? –

+0

我添加了C++标签,但如果不是,请将其更改为真正的语言标签。 –

+3

如果您不知道引用是什么,您可能需要向C++咨询介绍性书籍。 – Borgleader

回答

1

的代码来看,你使用的是C++

你得到一个新的指针c与你做b的的a然后值,用相同的值c,返回b,留下c的泄漏,因为没有什么指向c了。

在然后结束:

  • a是常量
  • bc值,这是a
  • c值的指针到一个新的变量不再被引用在你的代码
+0

好点。非常好的一点。编辑:) –

2

你可能想要从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语句中有未定义的行为。

相关问题