我在尝试访问std::list
对象时遇到了随机崩溃,无法弄清楚它为什么会发生。<string>
我从一个extern <string>
对象开始,但我现在创建了一个用于访问它的类,使用列表代替(不重要但可能更适合我需要它)并使用关键部分只是为了确定,但它没有任何帮助。
当我使用向量时,我在调用size()时遇到了崩溃。 使用临界区或不具有相同的效果。 我希望有人能指出我正确的方向。
谢谢! 代码:
vector<string>
答案 0 :(得分:1)
不要看begin()
如何真正崩溃,除非list
在进入此代码时无可救药地搞砸了。
您需要在致电advance
之前进行错误检查,如果指定的范围无效,则会出现故障。
list<string>::iterator it = WordContainer.begin(); // crash
if (index >= 0 && index <= WordContainer.size())
{
advance(it, index);
return *it;
}
return 0;
在错误中返回从0构造的string
的智慧对我来说似乎是个问题。可能会更好bool
返回和string&
参数。
advance的文档说:
必须通过前进的范围 非常规的,迭代器必须在哪里 可以解除引用或者结束。
答案 1 :(得分:0)
校正:
string CWordHandler::ReadWord(unsigned index)
{
if (index >= WordContainer.size()) return 0;
list<string>::iterator it = WordContainer.begin();
advance(it, index);
return *it;
}
抱歉格式。