热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL连接数据库函数内存泄露解决方案

Linux下使用C操作MySQL数据库时写个测试程序intmain(void){MYSQLm_mysql;mysql_init(m_mysql);

Linux 下使用C操作MySQL数据库时写个测试程序 int main(void) { MYSQL m_mysql; mysql_init(m_mysql);

Linux 下使用C操作MySQL数据库时写个测试程序

  • {
  • MYSQL m_mysql;
  • mysql_init(&m_mysql);
  • if(mysql_real_connect(&m_mysql,pLocalhost,pUser,pPass,pDB,0,NULL,0) == NULL)
  • //mysql_connect() 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。
  • cout<<"connect failed"<
  • else
  • cout<<"connect success"<
  • mysql_close(&m_mysql);
  • 编译后使用valgrind检测内存泄露

    [root@localhost string]# valgrind --tool=memcheck --leak-check=full ./mysql
    ==10352== Memcheck, a memory error detector
    ==10352== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
    ==10352== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info
    ==10352== Command: ./mysql
    ==10352==
    connect success
    ==10352==
    ==10352== HEAP SUMMARY:
    ==10352== in use at exit: 61,336 bytes in 16 blocks
    ==10352== total heap usage: 118 allocs, 102 frees, 115,929 bytes allocated
    ==10352==
    ==10352== 24,528 bytes in 6 blocks are possibly lost in loss record 4 of 5
    ==10352== at 0x4005903: malloc (vg_replace_malloc.c:195)
    ==10352== by 0x30DD75: my_once_alloc (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x30E59C: ??? (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x30EF96: ??? (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x30F111: get_charset_by_csname (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x32C3D2: mysql_init_character_set (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x32DABB: mysql_real_connect (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x8048A76: main (str.cpp:32)
    ==10352==
    ==10352== 28,616 bytes in 7 blocks are possibly lost in loss record 5 of 5
    ==10352== at 0x4005903: malloc (vg_replace_malloc.c:195)
    ==10352== by 0x30DD75: my_once_alloc (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x30E57A: ??? (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x30EF96: ??? (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x30F111: get_charset_by_csname (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x32C3D2: mysql_init_character_set (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x32DABB: mysql_real_connect (in /usr/lib/mysql/libmysqlclient.so.15.0.0)
    ==10352== by 0x8048A76: main (str.cpp:32)
    ==10352==
    ==10352== LEAK SUMMARY:
    ==10352== definitely lost: 0 bytes in 0 blocks
    ==10352== indirectly lost: 0 bytes in 0 blocks
    ==10352== possibly lost: 53,144 bytes in 13 blocks
    ==10352== still reachable: 8,192 bytes in 3 blocks
    ==10352== suppressed: 0 bytes in 0 blocks
    ==10352== Reachable blocks (those to which a pointer was found) are not shown.
    ==10352== To see them, rerun with: --leak-check=full --show-reachable=yes
    ==10352==
    ==10352== For counts of detected and suppressed errors, rerun with: -v
    ==10352== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 3

    2、解决措施

    简单的说是在断开数据库连接后使用

    mysql_library_end()

    关闭MYSQL 使用的库即在mysql_close(。。。)后添加mysql_library_end()就ok了

    再添加一句,在使用mysql API之前最好是调用mysql_library_init(。。。。)

    linux


  • 推荐阅读
    • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
    • PHP中Smarty模板引擎自定义函数详解
      本文详细介绍了如何在PHP的Smarty模板引擎中自定义函数,并通过具体示例演示了这些函数的使用方法和应用场景。适合PHP后端开发者学习。 ... [详细]
    • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
    • 本文探讨了服务器系统架构的性能评估方法,包括性能评估的目的、步骤以及如何选择合适的度量标准。文章还介绍了几种常用的基准测试程序及其应用,并详细说明了Web服务器性能评估的关键指标与测试方法。 ... [详细]
    • 【MySQL】frm文件解析
      官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
    • WebBenchmark:强大的Web API性能测试工具
      本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
    • 本文介绍了MySQL窗口函数的基本概念、应用场景及常见函数的使用方法。窗口函数在处理复杂查询时非常有用,例如计算每个用户的订单排名、环比增长率、以及动态聚合等。 ... [详细]
    • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
    • 搭建个人博客:WordPress安装详解
      计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
    • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
    • 本文详细介绍了如何利用Xshell配合Xftp实现文件传输,以及如何使用Pure-FTPd构建FTP服务,并探讨了VSFTP与MySQL结合存储虚拟用户的方法。 ... [详细]
    • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
    • Node.js在服务器上的多种部署策略
      本文探讨了Node.js应用程序在服务器上部署的几种有效方法,包括使用Screen、PM2以及通过宝塔面板进行简易管理。 ... [详细]
    • Java虚拟机及其发展历程
      Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
    • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
      本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
    author-avatar
    璋houge
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有