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