请教mysql_query导致的内存泄漏问题

fly_feng 2013-10-09 02:36:37
各位好,我在使用mysql插入数据时遇到内存泄漏的问题,插入数据的代码如下:


int addDevice(xxx& info) /// xxx是我定义的一个结构体
{
char sql[2048]
memset(sql,0,2048);
sprintf(sql,"set @x1 = '%s',@x2 = '%s',@x3 = '%s',@x4 = %d,@x5 = %d,@x6 = %d",info.x1, info.x2, info.x3, info.x4, info.x5, info.x6);
if (mysql_query(conn,sql)) /// conn是已经成功连接数据库的句柄
{
return -1;
}

sprintf(sql,"call insert_xxx(@x1,@x2,@x3,@x4,@x5,@x6)"); ///insert_xxx是数据库端的一个自定义sql函数
if (mysql_query(conn,sql))
{
return -1;
}

return 0;
}


上段代码中,第2个mysql_query会导致内存在不停地增加,久了会把所有内存空间用掉,而把其注释掉,内存的情况正常。想问下有没有大牛知道这是什么原因造成的,是这样的用法不对还是其他问题,谢谢不吝赐教。
...全文
400 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly_feng 2013-10-16
  • 打赏
  • 举报
回复
问题找到了,其实并不是MySql API的问题,而是我这样做每一条记录insert一次,效率很慢,导致在压力测试的时候,处理数据的速度没有数据进来的速度快,从而造成数据在内存中积压。
iihero 2013-10-10
  • 打赏
  • 举报
回复
不管有没有调用mysql_store_result, mysql_free_result都调就是了。
fly_feng 2013-10-10
  • 打赏
  • 举报
回复
多谢2位的回复,这2天我试了几种方法,包括调用mysql_free_result,更换api版本,更改为直接用sql语句而不是call的,这个问题仍然没有解决。而且很奇怪的是,我还有另外2个函数,delete和updata,都是和这个add的用法一样,却不会引起这个问题。 这个帖子先结了,继续寻找问题去了。
fly_feng 2013-10-09
  • 打赏
  • 举报
回复
引用 1 楼 rucypli 的回复:
用完mysql_query后调用mysql_free_result试试
谢谢rucypli的回复,我有个疑问,没有用mysql_store_result也需要调用mysql_free_result吗,还是说,mysql_query可能会开辟结果集内存,然后通过mysql_store_result和mysql_free_result的配合把内存释放掉?我之前没有涉及过mysql api,见笑了。
rucypli 2013-10-09
  • 打赏
  • 举报
回复
用完mysql_query后调用mysql_free_result试试

56,912

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧