【发布时间】:2014-03-07 10:26:05
【问题描述】:
我有一个带有命令列表的向量,如下所示:
//COMMAND INITIALISATION
std::vector<std::string> objectInitialisationAction;
objectInitialisationAction.push_back("CREATE"); //0
objectInitialisationAction.push_back("END_CREATE"); //1
objectInitialisationAction.push_back("START_TIMELINE"); //2
我只使用如下所示的函数访问这个向量:
int SearchFor(std::string search, std::vector<std::string> from)
{
int result=-1;
for(int i=0; i<from.size(); i++)
if(from[i]==search)
{
result=i;
break;
}
if(result == -1)
{
std::ofstream error("searching.txt");
error<<"search failed, original value = \""<<search<<"\""<<std::endl;
error<<"values in the table:"<<std::endl;
for(int i=0; i<from.size();i++)
error<<"value "<<i<<": "<<from[i]<<std::endl;
error.close();
}
return result;
}
只有一个函数调用:
commandNum=SearchFor(command[0], objectInitialisationAction);
这是我访问向量的唯一地方,但是当我第 n 次调用该函数(它总是在代码中的同一点制动)时,它访问错误并输出乱码。我在下面列出的一些代码:
search failed, original value = "CREATE"
values in the table:
value 0: CREATE Øç¼ Œ Ôç¼ Œ Ðç¼ Exit ¼ç¼ ¸ç¼ Œ p«üxðù ; ´ç¼ Œ pëù@òø €< °ç¼ ŒBerlin Sans FB Demi e ¬ç¼ ˆ°¿^nmra œç¼ ŒBerlin Sans FB Demi e ˜ç¼ help ”ç¼ ˆ object_dump ç¼ test Œç¼ Ž spawn ˆç¼ ‹ load_map „ç¼ Ž
//and so on...
关于为什么向量可能会这样损坏的任何建议?
【问题讨论】:
-
您的代码在我看来是正确的。在这种情况下,应用程序的另一部分应该会破坏内存,例如通过访问无效的指针。
-
@anderas 无效指针是指指向与该向量无关但访问与该向量相同的内存的其他一些值的指针吗?
-
对。例如,某处可能存在超出范围的数组访问、悬空指针或删除后使用。 Valgrind 之类的工具可能会在这方面为您提供帮助。
-
@anderas 谢谢,你很可能是正确的,因为我在我的程序中处理了很多指针。这也可以解释我的程序的其他一些问题。如果你愿意,你可以发表你的评论作为答案,以便我接受。
标签: c++ memory vector corruption