1

每当我在创建线程之前调用 readdir 时,都会收到如下所示的错误:

perl(2820,0x7fff70c33ca0) malloc: *** error for object 0x10082e600: pointer 
being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap

奇怪的是,当我在创建线程之前调用 readdir 时会发生这种情况(即在任何并发代码中都不会调用 readdir)。我什至不使用 readdir 的结果,只是调用它似乎把事情搞砸了。当我摆脱它时,一切似乎都很好。一些示例代码如下:

opendir(DIR, $someDir);
my @allFiles = readdir(DIR);
close(DIR);

my $thread = threads->create(\&sub1);
$thread->join();

sub sub1 {
print "in thread\n"
} 
4

2 回答 2

4

您需要使用 closedir 而不是 close 来关闭目录句柄。尽管我在 close() 中看到的症状有点不同,但修复它可以使其正常工作:

*** glibc detected *** perl: double free or corruption (!prev): 0x09bc7d28 ***

但是,这仍应报告为错误,因为在程序结束时自动关闭目录句柄应该是完全可以的。

于 2010-12-26T04:25:12.953 回答
0

使用所有版本的 perl 到最新(或两个)开发版本时,您将遇到打开 dirhandles 的问题 - 这个问题最近已修复。

PS 使用词法目录句柄。

于 2010-12-26T11:09:25.780 回答