Hi,
This is really a usage question - of how to use Devel::Leak to demonstrate memory leaks - instigated by a post by Tels on the same topic last week (blame him :-)
------------------------------------ use warnings; use strict; use Devel::Leak;
use Inline C => Config =>
BUILD_NOISY => 1;use Inline C => <<'EOC';
char * leaker1(int s) {
char * r;
int i; Newz(1, r, sizeof(char) * s, char);
if(r == NULL) croak("Failed to allocate memory in leaker1()");for(i = 0; i < s-1; ++i) r[i] = 50;
return r; }
SV * leaker2(int s) {
char * r;
int i; Newz(1, r, sizeof(char) * s, char);
if(r == NULL) croak("Failed to allocate memory in leaker1()");for(i = 0; i < s-1; ++i) r[i] = 50;
return newSVpv(r, 0); }
EOC
my $leakhandle; my $leakcount = Devel::Leak::NoteSV($leakhandle);
leaktest1();
print "Leaked ", Devel::Leak::CheckSV($leakhandle) - $leakcount, " things\n";
# $leakcount = Devel::Leak::NoteSV($leakhandle);
#leaktest2();
#print "Leaked ", Devel::Leak::CheckSV($leakhandle) - $leakcount, " things\n";
sub leaktest1{
for(2..5000) {
my $str = leaker1($_);
}
print "Leaving leaktest1()\n";
}sub leaktest2{
for(2..5000) {
my $str = leaker2($_);
}
print "Leaving leaktest2()\n";
}__END__
As I understand it, both the leaker1() and leaker2() functions will leak memory, but I'm unable to get Devel::Leak to report it using the above script.
If I run either the leaktest1() or the leaktest2() subroutine then I get a report of 0 leakages. Things can get a little crazy if I run both subroutines in the one execution of the script. If I don't reset $leakcount between the running of leaktest1() and leaktest2(), then leaktest1() still reports 0 leakages, but leaktest2() dumps out the addresses of a number of leaked items - and then the script segfaults.
If I *do* reset $leakcount between the running of the 2 subs, then both leaktest1() and leaktest2() again report a leakage 0 items.
Well .... I don't really need an explanation of *all* of that .... if someone can just show me the correct way to demonstrate the memory leaking capability of the code using Devel::Leak, that would be great .... that is, if it *can* be done.
Cheers, Rob
--
Any emails containing attachments will be deleted from my ISP's mail server before I even get to see them. If you wish to email me an attachment, please provide advance warning so that I can make the necessary arrangements.
