SafeArrayDestroy没有释放掉内存?

wxgiter 2010-12-24 01:44:54
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif // _DEBUG
#define _CRTDBG_MAP_ALLOC
#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include "oaidl.h"
#include "Psapi.h"
#pragma comment(lib, "Psapi.lib")
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif // _DEBUG

void displayMem(char * string)
{
HANDLE hProcess = GetCurrentProcess();
PROCESS_MEMORY_COUNTERS pmc;
GetProcessMemoryInfo(hProcess, &pmc, sizeof(PROCESS_MEMORY_COUNTERS));
std::cout << string << "\t\tMemSize: " << pmc.WorkingSetSize << " B\n";
CloseHandle(hProcess);
}

int _tmain(int argc, _TCHAR* argv[])
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);

//创建SAFEARRAY数组,每个元素为long型,该数组是一维数组
long nData[10]={1,2,3,4,5,6,7,8,9,10};

displayMem("before create SafeArray");
SAFEARRAY* pArray=NULL;
HRESULT hr=SafeArrayAllocDescriptor(1,&pArray);// 创建SAFEARRAY结构的对象
displayMem("after create SafeArray");

pArray->cbElements=sizeof(nData[0]);
pArray->rgsabound[0].cElements=10;
pArray->rgsabound[0].lLbound=0;
SafeArrayAllocData(pArray);

long* pData=NULL;
SafeArrayAccessData(pArray,(void**)&pData);
long l(0),h(0);
SafeArrayGetLBound(pArray,1,&l);
SafeArrayGetUBound(pArray,1,&h);
long Size=h-l+1;
SafeArrayAccessData(pArray,(void**)&pData);
for(long Idx=l;Idx<Size;++Idx)
{
pData[Idx]=nData[Idx];
std::cout << pData[Idx] << std::endl;
}
SafeArrayUnaccessData(pArray);

//访问SAFEARRAY数组
long* pValue=NULL;
SafeArrayAccessData(pArray,(void**)&pValue);
long Low(0),High(0);
hr=SafeArrayGetLBound(pArray,1,&Low);//维数索引从1开始
hr=SafeArrayGetUBound(pArray,1,&High);// 维数索引从1开始

SafeArrayUnaccessData(pArray);

displayMem("before destory SafeArray");
SafeArrayDestroy(pArray);
displayMem("after destory SafeArray");

getchar();
return 0;
}


如以上代码所示,运行后输出结果为:
before create SafeArray MemSize: 4222976 B
after create SafeArray MemSize: 4358144 B
1
2
3
4
5
6
7
8
9
10
before destory SafeArray MemSize: 4358144 B
after destory SafeArray MemSize: 4362240 B

调用SafeArrayDestroy之后,为什么没有释放掉内存,内存反而又增加了??
...全文
296 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxgiter 2011-05-11
  • 打赏
  • 举报
回复
不好意思,结贴晚了。
lyserver 2010-12-24
  • 打赏
  • 举报
回复
你不妨使用一个100M的安全数组,再看看SafeArrayDestroy后内存是否降下来。
lyserver 2010-12-24
  • 打赏
  • 举报
回复
SafeArrayDestroy会释放内存。可能是你的数组太小了看不到真实的内存波动情况。
wenning111 2010-12-24
  • 打赏
  • 举报
回复
应该是com内存管理的关系,SafeArrayDestroy之后并不会把那些内存归还系统。
反正没memory leak就是了。
wxgiter 2010-12-24
  • 打赏
  • 举报
回复
为什么看不到回复了?
难道被删了???

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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