访问我的std :: list <string>对象</string>时出现随机崩溃

时间:2010-11-25 01:58:51

标签: c++

我在尝试访问std::list<string>对象时遇到了随机崩溃,无法弄清楚它为什么会发生。

我从一个extern <string>对象开始,但我现在创建了一个用于访问它的类,使用列表代替(不重要但可能更适合我需要它)并使用关键部分只是为了确定,但它没有任何帮助。

当我使用向量时,我在调用size()时遇到了崩溃。 使用临界区或不具有相同的效果。 我希望有人能指出我正确的方向。

谢谢! 代码:

vector<string>

2 个答案:

答案 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;
}

抱歉格式。