我用值填充了列表。我正试图一次又一次地使用它们。
我尝试过while (!config.empty())
并在使用后删除了front()。仍然无法解决问题。
std::list<Object*> config;
已完成的配置(在config.push_back()
之后):
config[0]:
int testnumber = 1;
string testname = "Test1"
config[1]:
int testnumber = 2;
string testname = "Test2";
config[2];
int testnumber = 3;
string testname = "Test3";
---------------------------------------------------------------------
Logic* pLogic;
Object* pObject = config.front(); // config[0]
if (pObject) // while(!config.empty()) -- tried here
{
// do something
pLogic = new Logic(pObject);
config.pop_front();
}
逻辑:
Object* m_pObject;
Logic::Logic(Object* pObject)
:m_pObject(pObject)
{}
// Accessed config in other functions with m_pObject
代码可以正常工作并获取输出。但是最后得到
ERROR: Debug assertion failed
Expression:cannot dereference end list iterator
答案 0 :(得分:0)
在while
循环(while (pObject)
)内部,您没有更新(至少在发布的代码中)指针“ pObject”,因此它始终指向与开头相同的旧对象。在列表的顶部。此问题使循环无限循环,因此只要列表中有更多对象要弹出,它就可以工作。在使程序崩溃的问题上,它尝试从一个空列表中弹出一个元素,这是一个UB。
要解决此问题,您要做的就是:
pObject = config.front()
在行之后:
config.pop_front();
答案 1 :(得分:0)
我弄清楚了使用条件的地方。
这是它的样子,
Logic* pLogic;
if(!config.empty())
{
Object* pObject = config.front(); // config[0]
if (pObject)
{
// do something
pLogic = new Logic(pObject);
}
config.pop_front();
}