在CreateFileMapping和MapViewOfFile的时候我都指定了所有的读写权限。
但是程序运行到
*p=33;
的时候退出了。该怎么解决呢?源代码:#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
#include <WinBase.h>
int _tmain(int argc, _TCHAR* argv[]){
SECURITY_ATTRIBUTES sa;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle=TRUE;
HANDLE shm=CreateFileMapping(INVALID_HANDLE_VALUE,&sa,PAGE_EXECUTE_READWRITE,0,20,"myfm");
if(INVALID_HANDLE_VALUE==shm){
printf("CreateFileMapping failed\n");
return 1;
}
printf("CreateFileMapping successful\n");
int *ps=(int*)MapViewOfFile(shm,FILE_MAP_ALL_ACCESS,0,20,20);
printf("MapViewOfFile ok\n");//这句打印出来了
*ps=33;
printf("Unmap\n");//这句没有打印,windows弹出错误框,程序退出了。
UnmapViewOfFile(ps); if(!CloseHandle(shm)){
printf("CloseHandle failed\n");
return 1;
}
return 0;
}

解决方案 »

  1.   

    兄弟,你的代码有以下几个错误,改过来就好了    SECURITY_ATTRIBUTES sa;
        sa.lpSecurityDescriptor = NULL; // 注意此处,采用默认的安全描述符
        sa.nLength=sizeof(SECURITY_ATTRIBUTES);
        sa.bInheritHandle=TRUE;    MapViewOfFile(shm,FILE_MAP_ALL_ACCESS,0,0,20);
          //倒数第二个参数为0,因为你因该是从原文件映射对象的0起始处映射20字节。
          // 另外,MapViewOfFile失败时返回NULL,注意检查返回值哦~
    以上~