大共享内存的使用报错

woolgate 2014-03-01 11:59:24
申请了200M共享内存,
win7x64, vc2005

char* addr;
int len=1024*1024*200;
HANDLE handleshm=CreateFileMapping((HANDLE)0xffffffff,NULL,
PAGE_READWRITE,0,len,"MYSHMFILE");
if(GetLastError()==ERROR_ALREADY_EXISTS) createf=0;
if(mode == 1)
{
addr = (char *)MapViewOfFile(handleshm,FILE_MAP_ALL_ACCESS,0,0,0);
}

if(createf) memset(addr,0,len);

然后使用addr,在IDE里查看addr,
addr+1024*1024*9 显示有正确的地址,值为0,看起来没啥问题
addr+1024*1024*10 开始显示为<Bad Ptr>,就开始有问题了
使用后面这内存的结构指针也开始运行错误
First-chance exception at 0x0041fd25 in aa.exe: 0xC0000005: Access violation writing location 0x08f24c24.
First-chance exception at 0x77a74671 in aa.exe: 0xC015000F: The activation context being deactivated is not the most recently activated one.
Unhandled exception at 0x77a74671 in aa.exe: 0xC015000F: The activation context being deactivated is not the most recently activated one.

有什么需要注意的吗?
...全文
102 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2014-03-02
  • 打赏
  • 举报
回复
单步调试一下,看是否每一步都成功了
encoderlee 2014-03-02
  • 打赏
  • 举报
回复

char* addr;
int len=1024*1024*200;
HANDLE handleshm=CreateFileMapping((HANDLE)0xffffffff,NULL,
PAGE_READWRITE,0,len,L"MYSHMFILE");
addr = (char *)MapViewOfFile(handleshm,FILE_MAP_ALL_ACCESS,0,0,0);
memset(addr,0,len);
for (int i=0; i<1024*1024*200; i++)
{
	addr[i] = 'c';
}
WIN7 64位+VS2010 测试没有问题,全部填充了一下,没有出错
woolgate 2014-03-02
  • 打赏
  • 举报
回复
引用 1 楼 CharlesSimonyi 的回复:

char* addr;
int len=1024*1024*200;
HANDLE handleshm=CreateFileMapping((HANDLE)0xffffffff,NULL,
PAGE_READWRITE,0,len,L"MYSHMFILE");
addr = (char *)MapViewOfFile(handleshm,FILE_MAP_ALL_ACCESS,0,0,0);
memset(addr,0,len);
for (int i=0; i<1024*1024*200; i++)
{
	addr[i] = 'c';
}
WIN7 64位+VS2010 测试没有问题,全部填充了一下,没有出错
嗯,确实没问题,仔细比对了一下,应该是用了某个DLL也引用了共享内存长度这个宏定义, 而DLL没有编译,导致运行时被重新覆盖了共享内存 全部重新编译后没问题了。谢谢

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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