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

标签 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 == " << 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;
}

输出:

n == 5&n == 0x28fe90
now a== 0x28fe90
a == 0x28fe90  *a == 2686708
outint = 0x28fe90
intb ==  0x28fe90
*intb ==4619604
num ==5
a ==================== 0x28fe90
*a ==================== 4619604

最佳答案

您正在将内存位置设置为堆栈上的值。当方法结束时,堆栈值将被丢弃。如果您必须分配自己的内存,请使用 new 和 delete 来分配:

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

或者,如果你想在被调用者中使用一个变量的实际地址,你需要传入一个 int 指针而不是一个 int:

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

关于c++ - 为什么存储整数的内存块的值会反复变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18501560/

相关文章:

c++ - 派生类中的搜索函数,循环条件

python - 实现自定义最大功能

java - 将点转换为按钮

C++ 类和重载运算符

c++ - 从 C 到 C++ : function was not declared in this scope

c++ - 将 lambda 隐式转换为函数 ptr 以创建类

c - 在 C 中使用 a_list 结构(共享内存中的链表)实现共享内存段

c++ - 需要有关指针和耗时程序的建议。如何修复无效操作数和无法转换错误?

C++ - 比较字符串函数不起作用?

java:生成一个不在矩形内的随机点