diff options
Diffstat (limited to 'CPP/Common/NewHandler.cpp')
-rw-r--r-- | CPP/Common/NewHandler.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/CPP/Common/NewHandler.cpp b/CPP/Common/NewHandler.cpp index 7e5b1d4..65ef41d 100644 --- a/CPP/Common/NewHandler.cpp +++ b/CPP/Common/NewHandler.cpp | |||
@@ -97,19 +97,33 @@ const int kDebugSize = 1000000; | |||
97 | static void *a[kDebugSize]; | 97 | static void *a[kDebugSize]; |
98 | static int index = 0; | 98 | static int index = 0; |
99 | 99 | ||
100 | static bool wasInit = false; | ||
101 | static CRITICAL_SECTION cs; | ||
102 | |||
100 | static int numAllocs = 0; | 103 | static int numAllocs = 0; |
101 | void * __cdecl operator new(size_t size) | 104 | void * __cdecl operator new(size_t size) |
102 | { | 105 | { |
106 | if (!wasInit) | ||
107 | { | ||
108 | InitializeCriticalSection(&cs); | ||
109 | wasInit = true; | ||
110 | } | ||
111 | EnterCriticalSection(&cs); | ||
112 | |||
103 | numAllocs++; | 113 | numAllocs++; |
114 | int loc = numAllocs; | ||
104 | void *p = HeapAlloc(GetProcessHeap(), 0, size); | 115 | void *p = HeapAlloc(GetProcessHeap(), 0, size); |
116 | /* | ||
105 | if (index < kDebugSize) | 117 | if (index < kDebugSize) |
106 | { | 118 | { |
107 | a[index] = p; | 119 | a[index] = p; |
108 | index++; | 120 | index++; |
109 | } | 121 | } |
122 | */ | ||
123 | printf("Alloc %6d, size = %8u\n", loc, (unsigned)size); | ||
124 | LeaveCriticalSection(&cs); | ||
110 | if (p == 0) | 125 | if (p == 0) |
111 | throw CNewException(); | 126 | throw CNewException(); |
112 | printf("Alloc %6d, size = %8u\n", numAllocs, (unsigned)size); | ||
113 | return p; | 127 | return p; |
114 | } | 128 | } |
115 | 129 | ||
@@ -123,6 +137,7 @@ public: | |||
123 | } | 137 | } |
124 | ~CC() | 138 | ~CC() |
125 | { | 139 | { |
140 | printf("\nDestructor: %d\n", numAllocs); | ||
126 | for (int i = 0; i < kDebugSize; i++) | 141 | for (int i = 0; i < kDebugSize; i++) |
127 | if (a[i] != 0) | 142 | if (a[i] != 0) |
128 | return; | 143 | return; |
@@ -134,6 +149,7 @@ void __cdecl operator delete(void *p) | |||
134 | { | 149 | { |
135 | if (p == 0) | 150 | if (p == 0) |
136 | return; | 151 | return; |
152 | EnterCriticalSection(&cs); | ||
137 | /* | 153 | /* |
138 | for (int i = 0; i < index; i++) | 154 | for (int i = 0; i < index; i++) |
139 | if (a[i] == p) | 155 | if (a[i] == p) |
@@ -142,6 +158,7 @@ void __cdecl operator delete(void *p) | |||
142 | HeapFree(GetProcessHeap(), 0, p); | 158 | HeapFree(GetProcessHeap(), 0, p); |
143 | numAllocs--; | 159 | numAllocs--; |
144 | printf("Free %d\n", numAllocs); | 160 | printf("Free %d\n", numAllocs); |
161 | LeaveCriticalSection(&cs); | ||
145 | } | 162 | } |
146 | 163 | ||
147 | #endif | 164 | #endif |