LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 921|回复: 0

CPP下使用ezxml分析xml的问题

[复制链接]
发表于 2009-12-2 10:09:17 | 显示全部楼层 |阅读模式
以前在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内存存在着问题,导致后面的其他函数无法申请新的内存,于是出现了错误。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表