c++ - std::cout 改变变量值

标签 c++ pointers reference

我正在编写我的函数,它正确地返回了一个指向引用的指针。 我发现虽然该函数返回了它应该做的事情,但是 std::cout 正在修改结果。 我在这里做错了什么吗? 如何纠正这种行为?

请引用以下代码片段,

#include "stdafx.h"
#include <iostream>

using namespace std;
class MyClass
{
 public:
 MyClass(int x_):m_Index(x_){}
 int m_Index;
};

void myfunction(int *&currentIndex, MyClass obj)
{
 currentIndex = &obj.m_Index;
}

int _tmain(int argc, _TCHAR* argv[])
{
  MyClass obj(5);

  int *Index = NULL;
  myfunction(Index, obj);

  int curr_Index = *Index;
  cout << "Index = " << curr_Index << std::endl; // This works fine.
  cout << "Index = " << *Index << std::endl;     // This modifies *Index
  return 0;
}

最佳答案

void myfunction(int *&currentIndex, MyClass obj)
{
 currentIndex = &obj.m_Index;
}

调用未定义的行为,因为 obj 仅在函数调用的生命周期内有效。您保留指向它(或其成员之一)的指针,在它超出范围后使用它。

您可以通过指向不超出范围的内容来解决(请参阅@songyuanyao 的回答)。在这种情况下,不清楚为什么需要指针。 myfunction 可以只返回索引。

关于c++ - std::cout 改变变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38821014/

相关文章:

c++ - 在具有 2 个模板的模板类中重载 operator+

在 C 中不使用 strcpy 将字符指针复制到另一个字符指针

c - 如何解释这段代码 : if (strstr(line, *argv) != EOF) != except

c++ - 奇怪的数组签名

C++ - 引用,参数中的指针

c++ - 我有一个主要的游戏,我正在尝试使用 .go() 方法

c++ - 一个 std::shared_ptr<> 的 std::tuple<> 不起作用?

c++ - 如何从列表中删除一个元素?

C#引用比较

c++ - 着色玩具到 SFML