日期:2014-05-16  浏览次数:20832 次

跪求:linux运行程序,在mysql_real_query()里出现段错误,但程序实在检查不出什么错误
程序因为信号11退出:Program terminated with signal 11, Segmentation fault.
用gdb看产生的core文件,栈情况如下:
那个sql语句,用工具登录mysql数据库直接运行,是可以的,说明sql语句应该没问题. 实在找不出哪的问题,请高人指点。

交代一下程序背景,这是一个后台服务程序,启动时会产生100个链接的数据库连接池,和100个事务处理线程。问题发生在进程启动时,从数据库连接池中取一个连接去数据库取一些数据出来进行缓存。

个人怀疑是连接池或线程池太多了,占用了过多的内存,导致从数据库中取数据时,没有内存可以分配给取出来的数据。因为将连接池和线程池改到非常小(小于5),就有时可以正常启动,但也有无法启动的时候。

#0 0x00168359 in malloc_consolidate () from /lib/libc.so.6
#1 0x0016a3bd in _int_malloc () from /lib/libc.so.6
#2 0x0016c3ab in malloc () from /lib/libc.so.6
#3 0x0070c8dd in my_malloc () from /usr/lib/mysql/libmysqlclient.so.15
#4 0x0070fb5a in alloc_root () from /usr/lib/mysql/libmysqlclient.so.15
#5 0x007320c0 in cli_read_rows () from /usr/lib/mysql/libmysqlclient.so.15
#6 0x00732c81 in ?? () from /usr/lib/mysql/libmysqlclient.so.15
#7 0x007313f4 in mysql_real_query () from /usr/lib/mysql/libmysqlclient.so.15
#8 0x080908e9 in CMysql::Query (this=0x8eed330, 
  szSqlString=0xbf9b8e66 "select eteamid,userid,nickname,signature,skyuser,skypasswd,mobile,telephone from imenterdb_h.entermember") at src/api_mysql.cpp:93
#9 0x0808cb08 in db_get_group_member_info_e (user_id=0x0, vec=@0xbf9b97c8) at src/op_db.cpp:1495
#10 0x080a4142 in CCacheSyn::cache_syn_user (this=0x9053a18) at src/HashTable.cpp:209
#11 0x080a43af in CCacheSyn::cache_syn (this=0x9053a18) at src/HashTable.cpp:348
#12 0x0804dcc1 in main (argc=3, argv=0xbf9b9bf4) at main.cpp:346


------解决方案--------------------
段错误很有可能就缓冲区溢出造成的。。。
LZ检查一下代码中有关内存的操作。。有没有过界的。。