memcheck.cpp
上传用户:hxb_1234
上传日期:2010-03-30
资源大小:8328k
文件大小:2k
源码类别:

VC书籍

开发平台:

Visual C++

  1. // VirtualDub - Video processing and capture application
  2. // Copyright (C) 1998-2001 Avery Lee
  3. //
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17. #include <stdlib.h>
  18. #include <windows.h>
  19. #if 0
  20. void *allocmem(size_t siz) {
  21. void *mem;
  22. size_t rsiz = (siz + 4095 + 8) & -4096;
  23. mem = VirtualAlloc(NULL, rsiz, MEM_COMMIT, PAGE_READWRITE);
  24. if (!mem)
  25. return NULL;
  26. mem = (char *)mem + rsiz - ((siz+7)&-8) - 8;
  27. ((long *)mem)[0] = siz;
  28. ((long *)mem)[1] = 0x12345678;
  29. return (char *)mem + 8;
  30. }
  31. void freemem(void *block) {
  32. if (!block)
  33. return;
  34. block = (void *)((char *)block - 8);
  35. if (((long *)block)[1] != 0x12345678)
  36. __asm int 3
  37. VirtualFree((void *)((long)block & -4096), 0, MEM_RELEASE);
  38. }
  39. void *reallocmem(void *block, size_t siz) {
  40. void *nblock = allocmem(siz);
  41. if (!nblock)
  42. return NULL;
  43. if (!block)
  44. return nblock;
  45. if (((long *)block)[-1] != 0x12345678)
  46. __asm int 3
  47. if (siz < ((long *)block)[-2])
  48. siz = ((long *)block)[-2];
  49. memcpy(nblock, block, siz);
  50. return nblock;
  51. }
  52. void *callocmem(size_t s1, size_t s2) {
  53. void *mem = allocmem(s1 * s2);
  54. if (!mem)
  55. return NULL;
  56. memset(mem, 0, s1*s2);
  57. return mem;
  58. }
  59. void *operator new(size_t siz) {
  60. return allocmem(siz);
  61. }
  62. void operator delete(void *block) {
  63. freemem(block);
  64. }
  65. #else
  66. void *allocmem(size_t siz) {
  67. return malloc(siz);
  68. }
  69. void freemem(void *block) {
  70. free(block);
  71. }
  72. void *reallocmem(void *block, size_t siz) {
  73. return realloc(block, siz);
  74. }
  75. void *callocmem(size_t s1, size_t s2) {
  76. return calloc(s1, s2);
  77. }
  78. #endif