帮助理解Perl CGI脚本中的malloc错误?或者malloc_error_break在哪里



这是错误:

[Fri Jun 24 18:26:44 2011] [error] [client ::1] perl(3116) malloc: *** error for object 0x10082b808: incorrect checksum for freed object - object was probably modified after being freed.
[Fri Jun 24 18:26:44 2011] [error] [client ::1] *** set a breakpoint in malloc_error_break to debug
[Fri Jun 24 18:26:44 2011] [error] [client ::1] Premature end of script headers: adjsearch.cgi

首先,如果我知道如何应用error_log中第二行的建议,我可以尝试调试。http://lists.apple.com/archives/Xcode-users/2008/Apr/msg00160.html在Xcode中谈到了它,但我没有使用Xcode。。。

我不知道这意味着什么,希望能帮助我理解以下解释,以及如何使用这些信息来帮助调试。:

经过一番搜索,我发现了这个:

这个错误正是它所说的:你可能修改了记忆释放后。您的代码片段例如,没有显示在哪里itr_word已分配,但代码您看到此错误消息的位置只是一些记忆操作(可能是分配)导致内存调试器验证释放对象的校验和。这并没有告诉你太多其中写入到freed的错误内存实际发生

如果你想了解更具体的背景,请告诉我。非常感谢!

更新:非常奇怪,这里是问题(不是解决方案):

elsif ($category_id eq "allverb")
     {
      if (($lines[$l] =~ /b$verbformb/i))
        {
        next unless ($lines[$l] =~ /w+((w+)-d+,s(w+)-d+)/);
        $arg1 = $1;
        $arg2 = $2;
         #If the searchword is the 1st argument
            $goodmatch = 1;
         }
      }

如果我做这样的事情,就不会有错误(如果语句中添加了注释):

elsif ($category_id eq "allverb")
   {
   if (($lines[$l] =~ /b$verbformb/i))
      {
       next unless ($lines[$l] =~ /w+((w+)-d+,s(w+)-d+)/);
       $arg1 = $1;
       $arg2 = $2;
        if ($arg1 eq $verbform)
            {
              $goodmatch = 1;
            }
       }
   }

但如果我把if ($arg1 eq $verbform or $arg2 eq $verbform)放进去,或者把它们单独放在if语句中,还有。。?

也许是内存错误。。。。我的代码现在写得非常低效。或者apache错误。。。任何时候我都可以更多地限制条件(在if语句中添加更多,这样通过的次数就更少),它就可以工作了!我该怎么绕过这个?

使用的版本:

Mac OS X 10.6.7…Perl版本5.10.0…Apache2?Mac附带的那个。。。

我不能直接回答您的问题,但我可以说Perl中的malloc错误并不常见,尤其是在您这里介绍的代码中。

您是自己编译Perl二进制文件还是使用系统附带的二进制文件?如果是您自己完成的,请使用Configure-de重试。此外,我似乎还记得GCC和XCode的一个问题,它可能会影响你,但谷歌知道一切。

这也可能是糟糕的物理记忆,尽管如果这种情况在同一地点重复发生,那么原因就不太可能了。

这个脚本是否使用大量内存(数百或数千兆字节?)。

但我认为罪魁祸首可能是正则表达式中的反向引用。尝试不分配反向引用的代码:

$lines[$l] =~ /w+((w+)-d+,s(w+)-d+)/;
if (defined $1 && $1 eq $verbform) {
   $goodmatch = 1;
}

另外,使用Perl在另一台机器上尝试此代码。这可能不会在那里发生。

祝你好运,希望这对一些人有所帮助。

最新更新