|
以前在C程序中使用过ezxml这个工程来分析XML文件,昨天在CPP程序里调用了ezxml的函数,发现在程序运行的过程中出现的Segment fault, 运行时抛出:
*** glibc detected *** ./callLimit: malloc(): memory corruption: 0x08051080 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7d8ecb1]
/lib/libc.so.6[0xb7d90ccb]
/lib/libc.so.6(malloc+0x86)[0xb7d92596]
/usr/lib/libstdc++.so.6(_Znwj+0x27)[0xb7f2e457]
./callLimit[0x8049f54]
./callLimit[0x8049f77]
./callLimit[0x8049f8c]
./callLimit[0x804a0a0]
./callLimit[0x804a200]
./callLimit[0x804a3c2]
./callLimit[0x804a744]
./callLimit[0x804a83e]
./callLimit[0x80499ff]
./callLimit(__gxx_personality_v0+0x3a4)[0x8049364]
./callLimit(__gxx_personality_v0+0x156)[0x8049116]
/lib/libc.so.6(__libc_start_main+0xdc)[0xb7d4087c]
等信息, gdb跟了一下,发现是调用ezxml.c中的ezxml_parse_file函数,到其中malloc的时候出现了问题,如果我将这个函数在C程序中调用没有问题, 请教大家这种CPP调用C程序中的函数并且有malloc产生的时候,是不是GCC产生的程序在运行时调用的libc库产生了冲突导致的,有什么好的解决办法,谢谢大家:)
再附上gdb backtrace的结果:
Program received signal SIGSEGV, Segmentation fault.
0xb7d7279b in mallopt () from /lib/libc.so.6
(gdb) bt
#0 0xb7d7279b in mallopt () from /lib/libc.so.6
#1 0xb7d71803 in malloc () from /lib/libc.so.6
#2 0x0804e4bf in ezxml_new (name=0x0) at ezxml.c:851
#3 0x0804c795 in ezxml_parse_str (
s=0xb7d0e000 "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n<!-- Edited with XML Spy v2007 (http://www.altova.com) -->\r\n<CALL_LIMIT>\r\n\t<CONDITION>\r\n \t<DURATION_SECONDS>/tmp/log.uc</DURATION_SECONDS>\r\n"..., len=236) at ezxml.c:485
#4 0x0804d445 in ezxml_parse_fd (fd=6) at ezxml.c:654
#5 0x0804d4fa in ezxml_parse_file (file=0x804ef1e "call_limit.xml") at ezxml.c:672
希望对解决问题有所帮助,谢谢:)
感谢大家的关注,问题已经解决.原因是在程序中的一个函数中malloc内存存在着问题,导致后面的其他函数无法申请新的内存,于是出现了错误。 |
|