【问题标题】:c++ random numbers when returning pointer from function从函数返回指针时的c ++随机数
【发布时间】:2016-12-29 11:59:39
【问题描述】:

我在 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;
}

【问题讨论】:

  • 这与您尝试通过反复试验学习C++有关。这是行不通的。而是从一本好书中系统地学习它。
  • @JesperJuhl 谁说 f 返回一个 int? As a is int* 被注入 T?
  • @lordjohncena 我忽略了模板位 - 因此当我意识到时我删除了我的评论。
  • 未定义的行为是未定义的。您实际上期望达到什么目标?

标签: c++ oop


【解决方案1】:

您将一个指针和一个普通的int 传递给f,因为

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

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

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

正如我在 cmets 中已经说过的,你不应该尝试通过反复试验来学习 C++,这真的行不通,相信我。而是从一本好书系统地学习它。您将看到,首先不需要为此使用指针。

【讨论】:

  • 感谢您的解释和建议。我尝试了这种方法,因为我想尝试编写自己的小程序并可能更好地理解 C++。
  • @locket23 不客气。但我真的不能足够强调一个好的学习资源是多么重要。 C++ 是一个非常强大的工具,但它也是一个陷阱和不良做法的迷宫,如果你不小心,它会一次又一次地咬你。
猜你喜欢
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 2016-06-10
  • 2011-12-06
  • 2015-08-07
  • 2012-02-26
相关资源
最近更新 更多