gpt4 book ai didi

c++ - 动态分配内存和取消引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:04:19 26 4
gpt4 key购买 nike

我已经声明了一个指向名为 height 的 int 的指针。

我已经使用 new int 为这个指针分配了内存。

然后我将高度设置为传递给构造函数的整数。

但是,当我调用函数 infoheight() 时,根据我传入的整数,高度并没有得到 185?

有人知道为什么吗?

 class Person{
public:
Person(int a, string myname);
int* height;
string name;
void infoheight();
void infoname();

};

Person::Person(int a, string myname){
height = new int;
height = &a;
name = myname;
}

void Person::infoheight(){
cout << "Height: " << *(height) << endl;
}

void Person::infoname(){
cout << "Name: " << this->name << endl;
}


int main(int argc, const char * argv[]) {

Person Michael(185, "Michael");
Michael.infoname();
Michael.infoheight();


return 0;

}

最佳答案

在这两行中:

height = new int;
height = &a;

您首先要手动分配一个新的 int,然后将新分配的 int 的地址分配给 height,然后 您通过将 a 的地址分配给 height 来覆盖该地址。这是某种内存泄漏,因为您不再有权访问稍后需要删除 的对象。如果您的意图是将a 写入height指向int code>,你需要像这样取消引用 height:

height = new int;
*height = a;

或者,等价地:

height = new int(a);

但是除非您真的需要指针语义,否则只需按值而不是指针存储height。这将使您的代码更加简单且不易出错。

class Person{
public:
Person(int a, string myname);
int height; // make this an int, not int*
string name;
...
};

Person::Person(int a, string myname)
: height(a), name(myname) { // this is a member initialization list

}

关于c++ - 动态分配内存和取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53403848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com