⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memdebug.c

📁 Qt/Embedded是一个多平台的C++图形用户界面应用程序框架
💻 C
字号:
/***************************************************************************//*                                                                         *//*  memdebug.c                                                             *//*                                                                         *//*    Memory debugging functions (body only).                              *//*                                                                         *//*  Copyright 1996-1999 by                                                 *//*  David Turner, Robert Wilhelm, and Werner Lemberg.                      *//*                                                                         *//*  This file is part of the FreeType project, and may only be used        *//*  modified and distributed under the terms of the FreeType project       *//*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     *//*  this file you indicate that you have read the license and              *//*  understand and accept it fully.                                        *//*                                                                         *//***************************************************************************/#include <stdio.h>#include <stdlib.h>  typedef struct  TBlockRec_  {    char*  base;    long   size;  } TBlockRec;  static TBlockRec*  mem_blocks;  static int         num_mem_blocks;  static int         max_mem_blocks;  void  DM_Init_Mem()  {    num_mem_blocks = 0;    max_mem_blocks = 4096;    mem_blocks     = (TBlockRec*)malloc( max_mem_blocks *                                         sizeof ( *mem_blocks ) );  }  void  DM_Done_Mem()  {    /* Now print the remaining blocks */    if ( num_mem_blocks == 0 )    {      fprintf( stderr, "No memory leaked!\n" );    }    else    {      int  i;      fprintf( stderr, "There were %d leaked memory blocks\n\n",               num_mem_blocks );      fprintf( stderr, "base     size\n" );      fprintf( stderr, "------------------\n" );      for ( i = 0; i < num_mem_blocks; i++ )      {        fprintf( stderr, "%08lx  %04lx\n",                  (long)mem_blocks[i].base, mem_blocks[i].size );      }    }    free( mem_blocks );  }  void  DM_Record( char*  base,                   long   size )  {    TBlockRec*  block;#if 0    /* First, check that the block is not located within one of the */    /* recorded blocks                                              */    for ( i = 0; i < num_mem_blocks; i++ )    {      char  *start, *end, *_limit, *_base;      _base  = mem_blocks[i].base;      _limit = _base + mem_blocks[i].size;      start = base;      end   = base + size - 1;      if ( ( start >= base && start < limit ) ||           ( end >= base && end < limit )     )      {        fprintf( stderr, "Warning: Recording an invalid block!\n" );      }    }#endif    /* Add block to list */    if ( num_mem_blocks >= max_mem_blocks )    {      max_mem_blocks *= 2;      mem_blocks = realloc( mem_blocks,                            max_mem_blocks * sizeof ( *mem_blocks ) );    }    block = mem_blocks + num_mem_blocks;    block->base = base;    block->size = size;    num_mem_blocks++;  }  void  DM_Forget( char*  base )  {    TBlockRec*  block = mem_blocks;    int         i;    for ( i = 0; i < num_mem_blocks; i++, block++ )    {      if ( block->base == base )      {        /* simply move last block to the current position */        if ( num_mem_blocks > 1 )          *block = mem_blocks[num_mem_blocks - 1];        num_mem_blocks--;        return;      }#if 1      if ( base >= block->base && base < block->base + block->size )      {        fprintf( stderr, "Invalid block forgotten!\n" );      }#endif    }  }/* END */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -