summaryrefslogtreecommitdiff
path: root/misc/findleak.pl
diff options
context:
space:
mode:
Diffstat (limited to 'misc/findleak.pl')
-rwxr-xr-xmisc/findleak.pl42
1 files changed, 42 insertions, 0 deletions
diff --git a/misc/findleak.pl b/misc/findleak.pl
new file mode 100755
index 0000000..dbb3367
--- /dev/null
+++ b/misc/findleak.pl
@@ -0,0 +1,42 @@
+#!/usr/bin/perl
+# From: Ed Beroset <beroset@mindspring.com>
+
+my %mem = {};
+my %alloc = {};
+while(<>)
+{
+ if (/realloc\((0x[0-9a-f]+).*\).*returns \((0x[0-9a-f]+)/)
+ {
+ $mem{$1}--;
+ if ($mem{$1} != 0) {
+ print "free before alloc! $_";
+ }
+ if ($mem{$2} != 0) {
+ print "memory leak! $_";
+ }
+ $mem{$2}++;
+ $alloc{$2} = $_;
+ }
+ elsif (/free\((0x[0-9a-f]+)/)
+ {
+ $mem{$1}--;
+ if ($mem{$1} != 0) {
+ print "free before alloc! $_";
+ }
+ }
+ elsif (m/returns (0x[0-9a-f]+)/)
+ {
+ if ($mem{$1} != 0) {
+ print "memory leak! $_";
+ }
+ $mem{$1}++;
+ $alloc{$1} = $_;
+ }
+}
+foreach $goo (sort keys %mem)
+{
+ if ($mem{$goo})
+ {
+ print "$mem{$goo} $alloc{$goo}";
+ }
+}