程序执行的时候经常有些错误,不过多数错误都是普遍的。这里的错误一般都是 C 系统环境中的错误。

glibc detected

参考: http://blog.csdn.net/wallacexiang/archive/2009/06/29/4306268.aspx

我执行自己写的一个 C 程序 yu , 出现下面错误:

# ./yu mirror http://build.turbolinux.com.cn/repos/gtes11.3-updates-build/latest/x86_64/ /dist/osc/lab/GTES/
...
2253/2267 -- /dist/osc/lab/GTES/noarch//system-config-bind-4.0.3-4.1GT.noarch.rpm OK
2254/2267 -- /dist/osc/lab/GTES/noarch//pirut-1.3.28-13.1.noarch.rpm OK
*** glibc detected *** ./yu: free(): invalid next size (fast): 0x000000000249f020 ***
*** glibc detected *** ./yu: malloc(): memory corruption: 0x000000000249f040 ***

红 帽企业 Linux 提供的 glibc 可以执行附加的内部数据 健全检查,从而在尽 可能早的时候发现和保护数据被破坏。在默认的情况下,当被破坏的数据被发现 时,与上面相似的错误信息会被显示在标准的错误输出上(如果 stderr 没有打 开,会被记录在 syslog 中)。

在默认的情况下,产生这个错误的程序也会被中止。但是,这(以及是否产生错 误信息)可以通过环境变量 MALLOC_CHECK_ 来控制。以下的设置 是被支持的:

0
不产生错误信息,也不中止这个程序
1
产生错误信息,但是不中止这个程序
2
不产生错误信息,但是中止这个程序
3
产生错误信息,并中止这个程序

如果 MALLOC_CHECK_ 被设置为除 0 以外的值,这会使 glibc 进行更多的检查并 可能影响到系统 的性能。

设置环境变量即可忽略这个问题:

# MALLOC_CHECK_=0 ./yu mirror http://build.turbolinux.com.cn/repos/gtes11.3-updates-build/latest/x86_64/ /dist/osc/lab/GTES/

不过最好检查原因!