各位好,我在使用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会导致内存在不停地增加,久了会把所有内存空间用掉,而把其注释掉,内存的情况正常。想问下有没有大牛知道这是什么原因造成的,是这样的用法不对还是其他问题,谢谢不吝赐教。mysql内存泄漏

解决方案 »

  1.   

    用完mysql_query后调用mysql_free_result试试
      

  2.   

    谢谢rucypli的回复,我有个疑问,没有用mysql_store_result也需要调用mysql_free_result吗,还是说,mysql_query可能会开辟结果集内存,然后通过mysql_store_result和mysql_free_result的配合把内存释放掉?我之前没有涉及过mysql api,见笑了。
      

  3.   

    不管有没有调用mysql_store_result, mysql_free_result都调就是了。
      

  4.   

    多谢2位的回复,这2天我试了几种方法,包括调用mysql_free_result,更换api版本,更改为直接用sql语句而不是call的,这个问题仍然没有解决。而且很奇怪的是,我还有另外2个函数,delete和updata,都是和这个add的用法一样,却不会引起这个问题。
    这个帖子先结了,继续寻找问题去了。
      

  5.   

    问题找到了,其实并不是MySql API的问题,而是我这样做每一条记录insert一次,效率很慢,导致在压力测试的时候,处理数据的速度没有数据进来的速度快,从而造成数据在内存中积压。