
1. 内存不足:系统中可用内存已经被使用完,无法满足新的内存分配请求大厅银。
2. 内存泄漏:程序中存在未释放的内存,导致可用内存逐渐减少,最终导致内存分配失败。
3. 内存碎片:由于频繁的内存分配和释放,导致内存中存在大量的零散空间,无法满足连续的内存分配请求。
针对内存分配失败问题,可以尝试以下解决方法:
1. 优化程序,避免内存泄漏,释放不伏好需要的内存。
2. 增加系统内存,确保系统有足够的内存供程序使用。
3. 使用内存池技术,预先分配一滚宴定数量的内存块,避免频繁的内存分配和释放,减少内存碎片。
4. 调整程序的内存分配策略,避免一次分配过多的内存,可以采用分块分配的方式,分多次进行内存分配。
最近在Qt项缺拆目中发现,程序运行内存越来越大,然后使用_CrtDumpMemoryLeaks进行内存检查,发现很多泄漏提示,但是检查代码没发现问题.于是使用VS2010 创建了一个Qt console程序,代码如下,
#include <QtCore/QCoreApplication>
#include <assert.h>
/************************************************************************/
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, FILE, LINE)
#define new DEBUG_CLIENTBLOCK
static void Exit()
{ int i = _CrtDumpMemoryLeaks()assert( i == 0)
}
#define CheckMemoryLeaks() {atexit(Exit)}
#else
#define DEBUG_CLIENTBLOCK
#define CheckMemoryLeaks() ;
#endif
/************************************************************************/
int main(int argc, char *argv[])
{ CheckMemoryLeaks()QCoreApplication a(argc, argv)
return a.exec()}
===========================================================================
输出信息如下:
Detected memory leaks!
Dumping objects ->
{176} normal block at 0×013A57F0, 12 bytes long. Data: <L ]L ]>00 00 00 00 4C CF 1C 5D 4C CF 1C 5D
{175} normal block at 0×013A57A8, 12 bytes long. Data: <L ]L ]>00 00 00 00 4C CF 1C 5D 4C CF 1C 5D
{174} normal block at 0×013A56F8, 112 bytes long. Data: <] V: L ]>8C CB 1B 5D B0 56 3A 01 00 00 00 00 4C CF 1C 5D
{173} normal block at 0×013A56B0, 8 bytes long. Data: <] V: >98 CB 1B 5D F8 56 3A 01
{172} normal block at 0×013A5670, 4 bytes long. Data: <L ]>4C CF 1C 5D
{171} normal block at 0×013A5620, 20 bytes long. Data: <@ ]@ ]@ ]@ ]>40 20 1C 5D 40 20 1C 5D 40 20 1C 5D 40 20 1C 5D
{170} normal block at 0×013A55E0, 4 bytes long. Data: <@ ]>40 20 1C 5D
{156} normal block at 0×013A5530, 16 bytes long. Data: <>慎枝 01 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{155} normal block at 0×013A54F0, 4 bytes long. Data: <0U: >30 55 3A 01
{154} normal block at 0×013A5288, 552 bytes long. Data: <伏孝枣 R: >83 00 00 00 83 00 00 00 98 52 3A 01 CD CD CD CD
{151} normal block at 0×013A50D8, 108 bytes long. Data: <] P: L ]>E8 B9 1B 5D 90 50 3A 01 00 00 00 00 4C CF 1C 5D
{150} normal block at 0×013A5090, 8 bytes long. Data: <] P: >A8 B9 1B 5D D8 50 3A 01
{149} normal block at 0×013A5018, 60 bytes long. Data: <P: >02 00 00 00 90 50 3A 01 FC 1B 00 00 00 CD CD CD
{145} normal block at 0×013A4E58, 32 bytes long. Data: <>01 00 00 00 04 00 00 00 00 00 00 00 01 00 00 00
{144} normal block at 0×013A4E08, 20 bytes long. Data: <4)] \5] \5]( 1]>BC 34 29 5D F0 5C 35 5D 90 5C 35 5D 28 82 31 5D
{143} normal block at 0×013A4DC8, 4 bytes long. Data: <XN: >58 4E 3A 01
{142} normal block at 0×013A4D78, 16 bytes long. Data: <>01 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{141} normal block at 0×013A4D38, 4 bytes long. Data: <xM: >78 4D 3A 01
Object dump complete.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)