高分求解,急急急

bigtree712 2013-06-15 07:57:09
编译时无错,运行时如果只输入一条记录就显示的话会报错Access violation writing location这个错误。如果输入多条记录才显示的话有时会出现同样错误(比较经常)。

总之问题就是会报错Unhandled exception at 0x1048ad54 (msvcp100d.dll) in HW_2.exe: 0xC0000005: Access violation writing location 0xfeeefeee.。它会指向xutility.h下的这样一行代码:(*_Pnext)->_Myproxy = 0;

下面上代码
...全文
145 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-06-17
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。 判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
ri_aje 2013-06-16
  • 打赏
  • 举报
回复
m_insert 里面需要对 files 做相应的调整,否则 print_index 的时候 files[it_m_loc->first] 会挂。
xiaohutushen30 2013-06-16
  • 打赏
  • 举报
回复
是内存的问题,有可能是指针使用不当,楼主应该单步跟踪一下!
疯狂的红豆 2013-06-16
  • 打赏
  • 举报
回复
内存访问权限问题,肯定是你误用了null指针或是下标越界了,着重看下这两个
bigtree712 2013-06-16
  • 打赏
  • 举报
回复
先谢过楼上各位,容我看看
我看你有戏 2013-06-15
  • 打赏
  • 举报
回复
内存越界了,检测下吧,肯定是内存没处理好
bigtree712 2013-06-15
  • 打赏
  • 举报
回复
主函数里添加一次词,然后再打印一次,在析构的时候就跪了
bigtree712 2013-06-15
  • 打赏
  • 举报
回复
#include "Index.h" Index::Index() { //ctor } Index::~Index() { m_index.clear (); } void Index::getfiles(vector<string> v_file) { files.resize(v_file.size()); memcpy(&files[0], &v_file[0], v_file.size() * sizeof(string)); } void Index::m_insert(string str,int nof,int num) //插入词语,文件名,位置, { it_m_index=m_index.find(str); if(it_m_index==m_index.end()) { s_num.insert(num); m_loc.insert(pair<int,set<int> > (nof,s_num)); m_index.insert(pair<string,map< int , set<int> > >(str,m_loc)); } else { it_m_loc=it_m_index->second.find(nof); if(it_m_loc==it_m_index->second.end()) { s_num.insert(num); it_m_index->second.insert(pair<int,set<int> >(nof,s_num) ); } else { it_m_loc->second.insert(num); } } s_num.clear(); m_loc.clear(); } bool Index::m_search(string str,ostream& out) //查找并输出 { it_m_index= m_index.find(str); if(it_m_index==m_index.end()) { out<<str<<endl<<"NO RESULT"<<endl; return false; } else { out<<str<<endl; for(it_m_loc=it_m_index->second.begin();it_m_loc!=it_m_index->second.end();it_m_loc++) { out<<files[it_m_loc->first]<<":"; for(it_set=it_m_loc->second.begin();it_set!=it_m_loc->second.end();it_set++) { out<<*it_set<<" "; } out<<endl; } return true; } } void Index::m_and_search(string str,ostream& out) //and搜索(结果取交集) { wordapart(str); vector<string>::iterator it_v; set<int> s_result; set<int>::iterator it_in_s; //存放搜索结果 for (it_v=v_search.begin();it_v!=v_search.end();it_v++) { it_m_index=m_index.find(*it_v); if(it_m_index==m_index.end()) { s_result.clear(); break; //有一个不在搜索表中就结束 } if(s_result.empty()) { for(it_m_loc=it_m_index->second.begin();it_m_loc!=it_m_index->second.end();it_m_loc++) s_result.insert(it_m_loc->first); continue; } for(it_in_s=s_result.begin(); it_in_s!=s_result.end(); ++it_in_s) //新的结与旧的去求交集 { it_m_loc = it_m_index->second.find( *it_in_s ); if(it_m_loc == it_m_index->second.end()) { set<int>::iterator it_next; //直接删除迭代器会失效 it_next=it_in_s; it_in_s++; s_result.erase(it_next); } } } if(s_result.empty()) out<<"NO RESULT"<<endl; else for(it_in_s=s_result.begin();it_in_s!=s_result.end();++it_in_s) { out<<files[ *it_in_s ]<<endl; } v_search.clear(); } void Index::m_or_search(string str,ostream& out) //or搜索(结果取并集) { wordapart(str); vector<string>::iterator it_v; set<int> s_result; set<int>::iterator it_in_s; for (it_v=v_search.begin();it_v!=v_search.end();it_v++) { it_m_index=m_index.find(*it_v); if(it_m_index==m_index.end()) { continue; //有一个不在搜索表中仍继续 } if(s_result.empty()) { for(it_m_loc=it_m_index->second.begin();it_m_loc!=it_m_index->second.end();it_m_loc++) s_result.insert(it_m_loc->first); continue; } for(it_m_loc=it_m_index->second.begin();it_m_loc!=it_m_index->second.end();it_m_loc++) { it_in_s=s_result.find(it_m_loc->first); if(it_in_s==s_result.end()) { s_result.insert(it_m_loc->first); } else continue; } } if(s_result.empty()) out<<"NO RESULT"<<endl; else for(it_in_s=s_result.begin();it_in_s!=s_result.end();++it_in_s) { out<<files[ *it_in_s ]<<endl; } v_search.clear(); } void Index::print_index(ostream& out) //打印 { for(it_m_index=m_index.begin();it_m_index!=m_index.end();it_m_index++) { out<<it_m_index->first<<":"<<endl; for(it_m_loc=it_m_index->second.begin();it_m_loc!=it_m_index->second.end();it_m_loc++) { out<<files[it_m_loc->first]<<":"; for(it_set=it_m_loc->second.begin();it_set!=it_m_loc->second.end();++it_set) { out<<*it_set<<" "; } out<<endl; } out<<endl; out<<endl; } } void Index::m_delete(string str,ostream& out) //删除 { it_m_index= m_index.find(str); if(it_m_index==m_index.end()) out<<str<<"文件中不存在"<<endl; else { m_index.erase(it_m_index); out<<str<<"已删除"<<endl; } } void Index::wordapart(string str) { int pos=0; str+=" "; int size=str.size(); string s_input; for (pos=0;pos<size;pos++) { if(str[pos]<='z'&&str[pos]>='a') { s_input+=str[pos]; } else if(s_input=="and"||s_input=="or") { s_input.clear(); continue; } else { if(s_input.empty()) continue; else { v_search.push_back(s_input); s_input.clear(); } } } }
bigtree712 2013-06-15
  • 打赏
  • 举报
回复
#ifndef INDEX_H #define INDEX_H #include <vector> #include <string> #include <set> #include <map> #include <utility> #include <iostream> #include <fstream> #include <cstring> using namespace std; class Index { public: Index(); virtual ~Index(); void getfiles(vector<string>); void m_insert(string,int,int); //在index加入 bool m_search(string,ostream&); //index中查找并显示 void print_index(ostream&); //打印index表 void m_delete(string,ostream&); //删除index某个词 void m_and_search(string,ostream&); //and搜索 void m_or_search(string,ostream&); //or搜索 void m_phrase_search(string,ostream&); //短语搜索 void wordapart(string); //分句子为词 protected: private: vector <string> v_search; vector <string> files; set<int>::iterator it_set; map<int, set <int> >::iterator it_m_loc; map<string,map< int , set<int> > >::iterator it_m_index; set<int> s_num; //每个词在每个文件中的位置 map<int , set<int> > m_loc; //每个词的位置 map<string,map< int , set<int> > > m_index; //index表 }; #endif // INDEX_H

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧