C++ 迭代器在类中使用链表的 getter 时出现分段错误

问题描述 投票:0回答:1
#include <iostream>
#include <list>

using namespace std;
class A{
  private:
      list<int*> data;

  public:
      A(list<int*> data_){data=data_;}
      list<int*> getData(){return data;}
};

int main(){
  list<int*> temp;
  temp.push_back(new int(1));
  temp.push_back(new int(2));
  temp.push_back(new int(3));
  temp.push_back(new int(4));

  A a(temp);

  // First Iteration
  list<int*>::iterator it;
  cout<<(a.getData()).size()<<endl;
  for (it = (a.getData()).begin(); it != (a.getData()).end(); it++)
      cout << *(*it) << endl;
  
  // Second Iteration
  list<int*> mylist = a.getData();
  for (it = mylist.begin(); it != mylist.end(); it++)
      cout << *(*it) << endl;
}

第一次迭代会导致分段错误,但降神会迭代不会。是什么导致了第一次迭代中的分割错误?

c++
1个回答
0
投票

问题是

list<int*> getData(){return data;}

获取列表数据并制作列表的副本并返回该副本。 全班应该说:

class A{
  private:
      list<int*> data;

  public:
      A(list<int*>& data_) : data(data) {}
      list<int*>& getData() {return data;}
};

因此,除非为数据赋值,否则不会进行复制。

您可以在这里尝试:https://onlinegdb.com/0qHTOAybI

© www.soinside.com 2019 - 2024. All rights reserved.