hur.cn - 华软网

 热门搜索

如何收回内存映射缓冲区的内存?

  作者:未知    来源:网络    更新时间:2011/4/16
我运用内存映照,一个结构化的数据,CopyMemory到定义的结构表后,

计划收回缓冲区内存,但犯错,讨教如何措置惩罚。

谢谢!

C++">
Jumark Marklist[1470987];//Jumark是声明的一个结构

HANDLE hFile = CreateFile("D:\\DATA.BIN",
  GENERIC_READ,
  FILE_SHARE_WRITE|FILE_SHARE_READ,
  NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  NULL);   

if (hFile == INVALID_HANDLE_VALUE)
{
cout << "创建dbf资料失利..." << endl;
return RET_ERR;
}


HANDLE hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,17651844,NULL);

if (hFileMapping == NULL)
{
//CHSLog::GetHSLog()->hsDebugPerform("创建dbf资料映照失利...");
cout << "创建dbf资料映照失利..." << endl;
return RET_ERR;
}

Jumark *m_dbfBuffer = (Jumark *)MapViewOfFile( hFileMapping, FILE_MAP_READ, 0, 0, 0 );

CopyMemory(Marklist,m_dbfBuffer,17651844); //把数据复制到Marklist中便于措置惩罚。

//用下面两种方法都会

delete m_dbfBuffer;//释放指针,收回缓冲内存,两种方法,都会引起异常:0xC0000005

delete []m_dbfBuffer;//释放指针,收回缓冲内存,都会引起异常:0xC0000005

CloseHandle(hFileMapping);

CloseHandle(hFile);


---华软 网友回答---
不用delete,用UnmapViewOfFile(m_dbfBuffer);就好了
---华软网友回复---
引用 1 楼 dream238 的回复:
不用delete,用UnmapViewOfFile(m_dbfBuffer);就好了


对,我用UnmapViewOfFile就好了。有点奇怪为什么delete 会犯错。


---华软网友回复---
MapViewOfFile映照运用完之后如果需要释放,运用UnmapViewOfFile来举行。这个MSDN里都有提到,配对运用就好了。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。