+
+bool check_malloc_b = false;
+
+// #define MEMORY_PARANOID
+
+#ifdef MEMORY_PARANOID
+
+#include <malloc.h>
+
+void
+frobnify (void *p, size_t s)
+{
+ char *cp = (char*)p;
+ char *e = cp + s;
+ while (cp < e)
+ {
+ *cp++ ^=42;
+ }
+}
+
+
+void *
+operator new (size_t size)
+{
+ void *result;
+ result = malloc (size);
+ if (check_malloc_b)
+ frobnify (result, size);
+ return result;
+}
+
+void *to_frob; int frob_size;
+
+void
+set_frobnify (void * p, size_t sz)
+{
+ to_frob = p;
+ frob_size = sz;
+}
+
+void
+operator delete (void *p)
+{
+ if (!p)
+ return ;
+ if (p == to_frob)
+ {
+ frobnify (p, frob_size);
+ to_frob = 0;
+ frob_size=0;
+ }
+
+ free (p);
+}
+#endif // MEMORY_PARANOID
+