积极答复者
共享内存问题

问题
-
问题代码如下:
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
答案
-
内存访问异常。
1MapViewOfFile的时候打开了32768+len这么多内存是否越界?
2虚拟内存映射错误,虚拟地址状态不是RELEASE。这个只会在频繁使用之后才可能会出现。- 已标记为答案 KeFang Chen 2009年4月7日 1:54