C++内存不能read;二进制读取string类

来源:百度知道 编辑:UC知道 时间:2024/05/17 00:01:25
编译没问题,执行时跳出 执行[0x ]的指令,引用[0x ]出错,该内存为不能[read]
改改代码,有时又出现什么access violation ,就是令人头痛的这一段
我用vc6,按f10能正常运行下去,

void File<T,T1,T2>::Printmainfile(char* fn1,char* fn3)
{
ifstream fin(fn1,ios::in|ios::binary);
if(!fin)
{cerr<<fn1<<' '<<"没有找到!"<<endl;exit(1);}
ifstream f3(fn3, ios::in|ios::binary);//f3索引文件
if(!f3)
{cerr<<fn3<<' '<<"没有找到!"<<endl;exit(1);}
f3.seekg(0,ios::end);
int posend=f3.tellg();
int b=sizeof(T2);
int n=f3.tellg()/b;//记录个数
f3.seekg(0);
for(int i=0;i<n;i++) //for循环里面那一段出问题
{
T2 z;
f3.read((char*)&z,b);
fin.seekg(z.location,ios::beg);
T1 x;
fin.read((char*)&x,sizeof(T1));
cout<<"No."<<x.num<<" keyword: "<<x.k

一般在程序中出现这种问题可能是因为指针指空,或者数组越界的缘故,建议楼主跟踪调试一下程序,也许可能发现问题所在

这个问题的出现比较普遍,主要有几个方面:
【1】病毒引起的,对电脑全盘杀毒。
【2】硬件上的原因,主要是内存条不兼容引起的,必要时更换内存。
【3】系统或其它软件引起的。
【4】打开或关闭IE、QQ、游戏等出现该内存不能为read或written,首先想到可能就是这款软件的问题,(一般来解决办法就是卸载重新安装、升级或更换其它版本,不行只有卸载该软件,问题才能解决)。
(1)系统本身有问题,及时安装官方发行的补丁,必要时重装系统。
(2)某个软件出现的问题,这里主要是看看开机时运行的软件,(用360等检查开机运行的软件,把不必要运行的软件都去掉),软件冲突,卸载有问题的软件。
★下面有两种处理方法可以试试:【如果不行只有恢复或重装系统了】
(1)试用命令排除
开始-运行- 输入cmd-- 回车,在命令提示符下输入下面命令
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
怕输入错误,可以复制这条指令,然后在命令提示符后击鼠标右键,打“粘贴”,回车,耐心等待,直到屏幕滚动停止为止。
(2)运行regedit进入注册表, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks 下,应该只有一个正常的键值{AEB6717E-7E19-11d0-97EE-00C04FD91972}, 将其他的删除。

在程序崩溃后,点中断,查看堆栈内容不能看出问题出在什么地方吗?
变量监视下就应该可以看出那个地方读取到野指针内容了。