这是错误:
[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在另一台机器上尝试此代码。这可能不会在那里发生。
祝你好运,希望这对一些人有所帮助。