C++ 为什么存储整数的内存块的值会反复变化?

C++ 为什么存储整数的内存块的值会反复变化?,c++,pointers,point,C++,Pointers,Point,首先,我定义了一个整数指针和类A。我想传递一个指向a方法的指针来存储它 我发现类A的整数成员在调用A的方法时总是发生变化 我对如何避免这些变化感到困惑 #include <IOSTREAM> using namespace std; class A { private: int* a; public: A() { }; ~A() { }; void setA(int n) { cout << "n == "

首先,我定义了一个整数指针和类
A
。我想传递一个指向
a
方法的指针来存储它

我发现类
A
的整数成员在调用
A
的方法时总是发生变化

我对如何避免这些变化感到困惑

#include <IOSTREAM>

using namespace std;

class   A
{
private:
   int* a;
public:
   A()
   {

   };
   ~A()
   {

   };

void setA(int n)
{
    cout << "n == " << n << "&n == " << &n << endl;
    a = &n;
    cout << "now a== " << a << endl;
}

void PassA(int* &outint)
{
    cout << "a == " << a <<  "  *a == " << *a <<endl;
    outint = a;
    cout << "outint = " << outint << endl;
}

void Print()
{
    cout << "a ==================== " << a << endl;
    cout << "*a ==================== " << *a << endl;
}
};

int main()
{
A A_1;
int num = 5;
    A_1.setA(num);

    int *intb= NULL ;
    A_1.PassA(intb);
    //When the line above done,the value of A_1.a will change.
    cout << "intb ==  " << intb << endl;
    cout << "*intb =="  << *intb << endl;
    cout << "num ==" << num << endl;
A_1.Print();
return 0;
}
#包括
使用名称空间std;
甲级
{
私人:
int*a;
公众:
()
{
};
~A()
{
};
无效setA(int n)
{

cout您正在将内存位置设置为堆栈上的值。当方法结束时,堆栈值将被丢弃。如果您必须分配自己的内存,请使用“新建”和“删除”执行此操作:

void setA(int n)
{
    cout << "n == " << n << "&n will be different every time" << endl;
    a = new int();
    *a = n;
    cout << "now a== " << a << endl;
}
void setA(int n)
{

既然内存已经分配好了,为什么还要担心内存是如何分配的呢?我只想做一个在main()中定义的指针指向与类成员指针指向的地址相同的地址。保留
堆栈上的变量也可能是引用,这是危险的;然后,获取该引用的地址将导致指针在其指向的变量的函数执行之前有效(可能是调用方函数的)结束。@Andy.G除了解决这个问题外,了解局部变量是在堆栈上分配的,以及使用堆时动态分配的变量是很重要的。了解基本概念,以便下次知道发生了什么。@Csaba Toth是的,关键是堆栈和堆之间的区别,我将始终保持不介意。
void setA(int n)
{
    cout << "n == " << n << "&n will be different every time" << endl;
    a = new int();
    *a = n;
    cout << "now a== " << a << endl;
}
void setA(int* n)
{
    cout << "n == " << *n << " &n = " << n << endl;
    a = n;
    cout << "now a== " << a << endl;
}