Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问我的std::list时随机崩溃<;字符串>;对象_C++ - Fatal编程技术网

C++ 访问我的std::list时随机崩溃<;字符串>;对象

C++ 访问我的std::list时随机崩溃<;字符串>;对象,c++,C++,我在尝试访问我的std::list对象时遇到了随机崩溃,但我不知道为什么会发生这种情况 我从一个externvector对象开始,但现在我创建了一个类来访问它,使用列表代替它(这并不重要,但可能更适合于我需要它的用途),并使用临界部分来确保,但它没有任何帮助 当我使用向量时,调用size()时发生崩溃。 使用或不使用临界截面具有相同的效果。 我希望有人能给我指出正确的方向 谢谢大家!! 守则: 类CWordHandler { 公众: void AddWord(字符串文本); 无效删除字(无符号

我在尝试访问我的
std::list
对象时遇到了随机崩溃,但我不知道为什么会发生这种情况

我从一个extern
vector
对象开始,但现在我创建了一个类来访问它,使用列表代替它(这并不重要,但可能更适合于我需要它的用途),并使用临界部分来确保,但它没有任何帮助

当我使用向量时,调用size()时发生崩溃。 使用或不使用临界截面具有相同的效果。 我希望有人能给我指出正确的方向

谢谢大家!! 守则:

类CWordHandler
{
公众:
void AddWord(字符串文本);
无效删除字(无符号索引);
字符串读字(无符号索引);
无效明文();
无符号GetSize()

私人: 列出
WordContainer; }; 外部CWordHandler-WordHandler; // ---------------------------------- 字符串CWordHandler::ReadWord(无符号索引) { 列表
::迭代器it=WordContainer.begin();//崩溃 推进(it、索引); return index>=0&&index不知道
begin()
如何真正崩溃,除非
列表在输入此代码时被彻底弄乱

在调用
advance
之前需要进行错误检查,如果给定的范围无效,则会出现故障

list<string>::iterator it = WordContainer.begin(); // crash
if (index >= 0 && index <= WordContainer.size())
{
  advance(it, index);
  return *it;
} 
return 0;
list::iterator it=WordContainer.begin();//崩溃
如果(指数>=0&&index校正:

string CWordHandler::ReadWord(unsigned index)
{
 if (index >= WordContainer.size()) return 0;
 list<string>::iterator it = WordContainer.begin();
 advance(it, index);
 return *it;
}
string CWordHandler::ReadWord(无符号索引)
{
if(index>=WordContainer.size())返回0;
list::iterator it=WordContainer.begin();
推进(it、索引);
归还它;
}

格式很抱歉。

您确定是
begin()
失败了吗?如果
index
大于
size(),对
std::advance()
的调用肯定会失败
。您在解决方案的任何部分使用指针吗?哦,您是对的,前进是不安全的,我没有注意到。我是在第一行突破的。您显示的所有代码通常都不会导致崩溃。我猜(类似于@wheaties的含义)你在其他地方做了一些破坏堆的事情,但很难猜到会是什么。@MNB这就是为什么我问我做了什么。你要么链接到错误的库版本,要么在某个地方使用指针破坏堆,要么你正在使用的库破坏堆。不管你怎么看,堆正在被破坏在另一个地方。是的,我注意到了advance的问题,我会尝试调试它,并在可能的情况下在这里发布更多信息。它只是随机发生的,但正如我在使用向量时所说的,冲突总是发生在调用size()时。
string CWordHandler::ReadWord(unsigned index)
{
 if (index >= WordContainer.size()) return 0;
 list<string>::iterator it = WordContainer.begin();
 advance(it, index);
 return *it;
}