从函数返回指针时的c ++随机数

时间:2016-08-22 20:10:57

标签: c++ oop

我在C ++中有以下代码。每次我运行它,它有不同的输出。为什么会这样?它是否与内存泄漏有关?

#include <iostream>

using namespace std;
template <class T, class U>
T f(T x, U y)
{
    return x+y;
}
int f(int x, int y)
{
    return x-y;
}
int main()
{
    int *a=new int(4), b(16);
    cout<<*f(a,b);
    return 0;
}

1 个答案:

答案 0 :(得分:10)

您正在将指针和普通int传递给f,因为

int *a=new int(4), b(16);

就像

一样
int *a=new int(4);
int b(16);

因此,在f中,您有T == int*U == int,然后将int添加到指针并返回结果指针。因为它没有指向您拥有和初始化的内存,所以取消引用它是UB并且可能产生垃圾或崩溃或做任何它喜欢的事情。

正如我在评论中已经说过的那样,你不应该试图通过反复试验来学习C ++,这实际上是行不通的,相信我。从一本好书中系统地学习它。您将看到首先不需要使用指针。