C 矢量内存访问问题
C++ vector memory access issue
我有一个向量,带有命令列表,如下所示:
//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个调用该功能(总是在代码中同一点制动)时,它会访问错误并输出Gibberish。我下面列出的一些代码:
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...
关于为什么向量可能会这样损坏的任何建议?
似乎都是正确的。编译并执行此操作。如果一切都正确,则可能是在代码的另一部分中。
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int SearchFor(std::string search, std::vector<std::string> from)
{
int result=-1;
for(unsigned 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(unsigned int i=0; i<from.size(); i++)
error<<"value "<<i<<": "<<from[i]<<std::endl;
error.close();
}
return result;
}
int main()
{
std::vector<std::string> objectInitialisationAction;
objectInitialisationAction.push_back("CREATE"); //0
objectInitialisationAction.push_back("END_CREATE"); //1
objectInitialisationAction.push_back("START_TIMELINE"); //2
for(unsigned int i=0; i<objectInitialisationAction.size(); i++)
{
cout<< objectInitialisationAction[i] << endl;
}
cout << "FOUND " << SearchFor("CREATE", objectInitialisationAction);
return 0;
}
我建议您在文件开头添加using namespace std;
,因此您必须在每个声明上添加std::blablabla
...您的代码将更可读::)和请...。>
您的代码对我来说看起来正确。在这种情况下,您的应用程序中应该有另一部分破坏内存。例如,可能会有一个偏僻的阵列访问,悬挂的指针或某处使用后使用。诸如Valgrind之类的工具可能会在这里为您提供帮助。
代码看起来还不错。对我来说,最有可能的情况是,字符串的长度字段被无意间覆盖,因为命令(即实际数据)仍在那里。只是字符串认为它比这更长。(覆盖字符不会导致您报告的输出:命令将被覆盖,但字符串长度仍然很短。)覆盖内存通常通过阵列索引或指针进行界限。它指出的数据必须与字符串具有相同的链接(在您的示例中,本地或全局/静态)。
错误搜索的一种策略是偶尔打印objectInitialisationActionAction元素字符串的长度;如果他们太久了,您知道出现问题了。
使用一种二进制搜索策略来评论代码(评论一半 - 嘲笑它的功能以保持PROG运行的功能 - 并查看错误是否仍然发生,然后再次将故障的部分分开。)。
请注意,您通过值将向量传递到SearchFor()中,这可能是意想不到的。腐败可能发生在呼叫者或Callee方面,这应该易于测试。-
希望这有所帮助。
尝试通过const refs传递所有参数:
int SearchFor(const std::string& search, const std::vector<std::string>& from)
{
...
}
- 从其他类访问类时遇到问题
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 初学者问题:如何访问此变量?
- 在C++中循环访问自定义结构列表的小问题
- 从资源视图访问对话框时出现问题
- 在 c++ 中创建和访问 4D 向量时出现问题
- 我遇到了一个糟糕的访问问题
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 指向结构的指针的 2D 数组.内存访问问题
- C 矢量内存访问问题
- 类成员变量的C++线程访问问题
- 迭代器无法正确访问问题
- 声明指向数组的指针 - 访问问题
- Microsoft访问问题
- 链表自制类哭诉内存访问问题(C++)
- (C++)双链接列表模板-访问问题
- 链接列表头节点标识符/指针访问问题
- 内存访问问题
- c++继承和成员访问问题
- 虚拟机和内存访问问题