关于GlobalAlloc分配内存失败的有关问题。机子物理内存足够
发布时间:2011-06-23 14:26:05 文章来源:www.iduyao.cn 采编人员:星星草
关于GlobalAlloc分配内存失败的问题。机子物理内存足够 我用GlobalAlloc分配内存来保存位图数据, //Allocate memory for DIB hDIB = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize); if (hDIB == 0) { int error = ::GetLastError(); CString tem_str; tem_str.Format("%d",error); tem_str = _T("error code = ")+tem_str; AfxMessageBox(tem_str); return false; } pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB); 但是发现一个问题,在打开几张80M的bmp位图后,在运行到这里就会分配内存失败,提示errorcode是8,我查了,是内存不足。但是我打开任务管理器看内存还是6,700m的样子,而且我机子是2G的内存,物理内存是足够的,但是为什么在程序中会分配内存失败呢,谢谢各位。------解决方案-------------------- 应用程序使用的是虚拟内存,看看进程占用的虚拟内存是多少,再看一下页面文件的剩余空间有多少。
------解决方案-------------------- GlobalAllocEx
------解决方案--------------------
探讨 我在进程里面看,程序才使用十几M的内存啊。而且可用的内存有1G。
------解决方案-------------------- 这个问题太简单了,因为超过16M空间GlobalAlloc就会出错--不是一定出错,就是很可能出错。 这时候应该使用VirtualAlloc和VirtualFree来操作。 这不是我的经验,而是在剽窃别人代码时在注解行俩面的偶然发现哈:)
------解决方案-------------------- http://msdn.microsoft.com/zh-cn/library/aa366574(v=VS.85).aspx Note The global functions have greater overhead and provide fewer features than other memory management functions. New applications should use the heap functions unless documentation states that a global function should be used. For more information, see Global and Local Functions. MSDN推荐使用 HeapAlloc and HeapFree
------解决方案-------------------- 内存分配出现的问题很难断定,但是一般情况下,出现“问题”的地方并不是根源所在。 据我个人的经验,很多原因是别的地方的代码出现了错误(比如,overwrite了堆栈、corrupt了heap表),从而导致后续的看似不可能的分配错误发生。 所以,你最好仔细看看其他地方的代码有没有把内存搞坏的逻辑。
友情提示: 信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
关于visual studio 2005的工程文件*.vcproj的问题
请问:Visual Studio 2005 新建一个工程之后,会自动生产一个*.vcproj的一个文件,这...
用MFC画图的问题
我现在要用随机数产生300个固定的点保存在数组中,并在ondraw里画出这300个点,而且通过定时器使这300个点做运动。...
VS2010中的C++怎么连接数据库?
之前一直用VC++6.0的、现在想学学用最新的VS、但是感觉连接数据库和之前不一样了、具体应该怎么弄...
CLI编程 高手帮忙
我现在用C++/CLI 混编,
我有一个方法, 是调用一个C 的类库 得到一个 char * 的值
现在我...
新手求教::VC.NET2003里面的"添加变量"菜单变灰了,怎么弄?
最近学着用.net写程序,以前用的是6.0,不知道为什么我设计的EDIT Con...
刚学习vc.net 请教一个String做参数的问题,请高手指教一下
下面的代码为什么不能编译呢,出现这个错误呢
.\clr.cpp(12) : error C3...
VS2003中通过ADO取SQL2003中bigint 负值变正值的问题,求助!
在SQL2003中 数据库中假设 一个bigint类型的数据位-1234这样的值,通过如...
新手学习VC用那个版本的编译器好!
新手学习VC用那个版本的编译器好!?
------解决方案--------------------
VC++6.0
------解决...
正则表达式
有这样的字符串
"1,',2"",3"
希望将单个的"替换成单引号,将连续两个的""替换成一个双引号。
正则表达式该如何写。
...
为什么<<精通MFC>>附带的源程序不能编译成功
vc2010编译后有两个错误提示,分别如下,
错误一:
1>c:\program files\microsoft vi...