none
共享内存问题 RRS feed

  • 问题

  • 问题代码如下:

    int len=0;
    ... ...
     SECURITY_ATTRIBUTES sa;
        SECURITY_DESCRIPTOR sd;
        sa.nLength = sizeof(SECURITY_ATTRIBUTES);
        sa.bInheritHandle = TRUE;
        sa.lpSecurityDescriptor = &sd;
        if(!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION)) {
      CString sterr;
      sterr.Format("initSharedMem()函数中执行InitializeSecurityDescriptor()错误 , GetLastError() = %d !",GetLastError());
      logfile(sterr);
     }
        if(!SetSecurityDescriptorDacl(&sd, TRUE, (PACL)NULL, FALSE)) {
      CString sterr;
      sterr.Format("initSharedMem()函数中执行SetSecurityDescriptorDacl()错误 , GetLastError() = %d !",GetLastError());
      logfile(sterr);
        }
        SharedFile = CreateFileMapping(
                            (HANDLE)-1,
                            &sa,
                            PAGE_READWRITE,
                            0,
                            32768+len,
                            "DBWIN_BUFFER");
        if (!SharedFile) {
      CString sterr;
      sterr.Format("initSharedMem()函数中执行CreateFileMapping()错误 , GetLastError() = %d !",GetLastError());
      logfile(sterr);
        }
        SharedMem = MapViewOfFile(
                            SharedFile,
                            FILE_MAP_ALL_ACCESS,
                            0,
                            0,
                            32768+len);
        if (!SharedMem) {
      CString sterr;
      sterr.Format("initSharedMem()函数中执行MapViewOfFile()错误 , GetLastError() = %d !",GetLastError());
      logfile(sterr);
        }
    
    ... ...


    以上代码执行过程时偶尔会出现如下错误日志:
    2009-03-30 15:53:27    initSharedMem()函数中执行MapViewOfFile()错误 , GetLastError() = 5 !
    2009-03-30 15:53:38    initSharedMem()函数中执行MapViewOfFile()错误 , GetLastError() = 5 !

    这种错误很难固定时间重现,一般不出。只是说不清什么时候偶尔会出。

    不知道为什么,怎么解决。
    盼望高人指点!
    谢谢。


    sgliu
    2009年3月31日 6:31

答案

  • 内存访问异常。
    1MapViewOfFile的时候打开了32768+len这么多内存是否越界?
    2虚拟内存映射错误,虚拟地址状态不是RELEASE。这个只会在频繁使用之后才可能会出现。

    2009年3月31日 10:39
    版主

全部回复

  • 内存访问异常。
    1MapViewOfFile的时候打开了32768+len这么多内存是否越界?
    2虚拟内存映射错误,虚拟地址状态不是RELEASE。这个只会在频繁使用之后才可能会出现。

    2009年3月31日 10:39
    版主
  • 谢谢你的回答!
    是不是内存越界不好说,因为不知道怎么知道是否内存越界了。这种情况不知道什么时候就会出现,不好进行分析。


    sgliu
    2009年4月2日 1:30