test2.exe 中的 0x7c8018cf 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突

xizero00 2010-04-13 09:56:33
// test2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "test2.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 唯一的应用程序对象

CWinApp theApp;

using namespace std;
__int64 myFileSeek (HANDLE hf, __int64 distance, DWORD MoveMethod);
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

// 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
}
HANDLE hfile=CreateFile(TEXT("\\\\.\\PhysicalDrive0"),GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
int i=0,a;
byte buff[512];
__int64 end=160041885184;//最后倒数512字节前的位置
if(myFileSeek(hfile,end,FILE_BEGIN)==-1)
{
cout<<"出错:"<<i<<endl;
cout<<"到达末尾了吗?"<<endl;
}
ReadFile(hfile,buff,512,0,NULL);//最起码512字节,否则读取会出错!否则就为空!!!!!!,这里出错时因为写不到缓存里面buff
cout<<buff<<endl;
cout<<i<<endl;
cin>>a;
cout<<i<<endl;
int j;
cin>>j;
return nRetCode;
}


__int64 myFileSeek (HANDLE hf, __int64 distance, DWORD MoveMethod)

{

LARGE_INTEGER li;


li.QuadPart = distance;


li.LowPart = SetFilePointer (hf,

li.LowPart,

&li.HighPart,

MoveMethod);


if (li.LowPart == INVALID_SET_FILE_POINTER && GetLastError()

!= NO_ERROR)

{

li.QuadPart = -1;

}


return li.QuadPart;

}


运行后却出现写入位置 0x00000000 时发生访问冲突,百思不得其解,明明已经分配了内存了,怎么还提示错误呢,另外内存没有溢出啊
不知道什么原因
...全文
1263 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
绝版小柒 2010-11-04
  • 打赏
  • 举报
回复
对,空指针问题?0x00000000
xizero00 2010-04-16
  • 打赏
  • 举报
回复
已经解决了,谢谢各位的回答,真的很谢谢
还是我比较粗心
xizero00 2010-04-16
  • 打赏
  • 举报
回复
之前的一个问题已经解决了,不过还是谢谢你的解答,现在遇到的问题就是,我在调试的时候,把SetFilePointer的指针移动的位置设置为0,在硬盘的开始,在调试的时候,没法读取数据,变量监视的也为空,但是如果独立运行,则可以读取数据来。
纳闷的一塌糊涂
Eleven 2010-04-16
  • 打赏
  • 举报
回复
运行后却出现写入位置 0x00000000 时发生访问冲突,百思不得其解,明明已经分配了内存了,怎么还提示错误呢,另外内存没有溢出啊
不知道什么原因


空指针问题????0x00000000
xizero00 2010-04-16
  • 打赏
  • 举报
回复
现在的问题是,读是读出来了,可是,有时候读的出来,有时候读不出来,而且,用调用硬盘驱动获得的磁盘容量(通过获得柱面,扇区和每扇区的容量等参数计算出来的容量)和实际winhex中查到的容量不同,比查到的容量要小
不知道为什么,有时候会读的出来,有时候会读不出来,应该不是权限的问题,因为权限都给了
xizero00 2010-04-15
  • 打赏
  • 举报
回复
谢谢你,我再看看..
向立天 2010-04-14
  • 打赏
  • 举报
回复
从0开始读呢?
也会出错?
xizero00 2010-04-14
  • 打赏
  • 举报
回复
也就是,读取错误了
xizero00 2010-04-14
  • 打赏
  • 举报
回复
dwCount的值为:3435973836
xizero00 2010-04-14
  • 打赏
  • 举报
回复
搜索最后一个dbr备份
向立天 2010-04-14
  • 打赏
  • 举报
回复
看一下dwCount的返回值
可能你没有读到任何内容
总觉得你这样随意的在硬盘上读文件有些不妥
你想做什么?
xizero00 2010-04-14
  • 打赏
  • 举报
回复
现在是可以读取了,可是读取到buff里面的数据全是
屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯铪铪

不管文件指针怎么移动都是这个
不知道怎么回事
向立天 2010-04-14
  • 打赏
  • 举报
回复
会不会是权限的问题
xizero00 2010-04-14
  • 打赏
  • 举报
回复
从0开始读还是会出错
向立天 2010-04-13
  • 打赏
  • 举报
回复
这样试一下
DWORD dwCount;
ReadFile(hfile,buff,512,&dwCount,NULL);
xizero00 2010-04-13
  • 打赏
  • 举报
回复
不能,依旧无法写入到buff
向立天 2010-04-13
  • 打赏
  • 举报
回复
__int64 end=160041885184;//最后倒数512字节前的位置
====
把这个位置往前移问题会解决么?
xizero00 2010-04-13
  • 打赏
  • 举报
回复
忘了告诉了,硬盘的大小是160041885696字节
我把指针定位到最后倒数512,然后读取最后的512 字节,但是写入到buff中出错了
xizero00 2010-04-13
  • 打赏
  • 举报
回复
ReadFile()出错了,提示 test2.exe 中的 0x7c8018cf 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突

我内存明明分配了,地址也正确的啊,为什么会出错呢
如果我用byte *buff=(byte *)malloc(512*sizeof(byte));
动态分配还是一样.
向立天 2010-04-13
  • 打赏
  • 举报
回复
调试一下
哪句出的错?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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