gpt4 book ai didi

c++ - 对内存损坏 c++ 的困惑

转载 作者:行者123 更新时间:2023-11-30 04:05:50 25 4
gpt4 key购买 nike

class Test {
int a ;
int b ;

public :
Test() { }
Test(int x , int y) : a(x),b(y) { }

int getA() { return a ;}
int getB() { return b ;}
};

int main () {
list <Test *> mylist;
Test *t1 = new Test(10,20);

mylist.push_back(t1);
delete t1 ; //deleting the pointer

list <Test*> ::iterator it ;

for( it = mylist.begin() ; it != mylist.end() ; ++it ) {
Test *temp = (*it) ;
cout<<"taking data from list="<<temp->getB()<<endl;
}
return 0 ;
}

我对程序的输出感到困惑,在列表中插入指针后我删除了指针。理想情况下它应该给出段错误但它正在打印 0 。

最佳答案

delete t1 ;   //deleting the pointer

delete 不是指针,而是对象, this 指针指向。

如你push_back std::list 中的指针 ,只复制指针,不复制真正的对象。

处理此问题的两种标准方法是:

  • 如果您真的需要在容器中存储指针,delete当您知道对象时,list将不再使用
  • 避免此类问题的最常见方法是使用 list <Test>而不是 list <Test*> .

关于c++ - 对内存损坏 c++ 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23125842/

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