`
bollaxu
  • 浏览: 219888 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MySQL C API的内存泄露问题

 
阅读更多

程序使用MySQL的C API比较频繁,在检查程序内存泄露的时候,想到了API里面会不会有内存泄露的问题。网上说mysql api在使用的时候会出现泄露,有人用了valgrind来测试,找到了可能出现泄露的地方,官方的api文档里面也说到,如果使用完api之后,最好调用mysql_library_end()函数来释放内存。

 

mysql api的官方建议,如果是多线程的时候,最好是在创建线程之前就调用mysql_init()函数,或者使用mutex加锁,因为这个函数不是线程安全的。(具体见:http://docs.oracle.com/cd/E17952_01/refman-5.5-en/mysql-library-init.html)。在我的程序里面是线程池的概念,在循环里面会频繁使用mysql的库去做连接、查询数据库,而线程不会退出。怎么样可以封装一个线程安全且不会内存泄露的mysql查询函数呢?(使用my_init()和mysql_thread_end()?)

分享到:
评论
1 楼 烟雨遥_sun 2013-01-30  
可否考虑用长连接?表示正在用这个多线程连接对数据库的,遇到了内存泄露的问题,不知道怎么解决。

相关推荐

    MySql-C-API.rar_mysql api_mysql c++

    MySQL C API 是 MySQL 数据库与 C 语言交互的一组接口,它允许程序员使用 C 语言编写应用程序,直接操作 MySQL 数据库。本项目提供了一个简单的 MySQL C API 的 C++ 封装,旨在帮助初学者更容易地理解和使用 MySQL ...

    MySQL数据库CAPI

    MySQL数据库CAPI是MySQL数据库与C++应用程序交互的一种方式,它允许开发者使用C++语言来执行MySQL数据库的各种操作,如创建、查询、更新和删除数据(通常简称为CRUD操作)。CAPI,全称为“应用程序编程接口”,在...

    mysql_c_api

    在IT领域,尤其是在数据库开发与应用中,对MySQL的C API进行封装是常见的技术实践,旨在简化数据库操作,提高代码的可读性和可维护性。本文将深入解析MySQL C API的封装过程及其在实际项目中的应用,特别是通过一个...

    MFC C_API方式连接Mysql相关操作demo程序

    1. MySQL C API介绍:MySQL C API是用于与MySQL服务器进行通信的一套函数库,这些函数支持各种数据库操作,如连接服务器、执行SQL语句、处理结果集等。该API是一种底层的、直接的数据库操作方式,对于需要在应用程序...

    c++ 通过api 调用mysql

    本文将详细介绍如何在C++中通过MySQL API进行数据库连接、查询以及解决Resultset内存管理问题。 首先,你需要包含必要的头文件,这些文件位于`include`目录下,可能包括`mysql.h`,它包含了所有MySQL API函数的声明...

    MySQL的C语言API接口

    MySQL的C语言API接口是开发人员使用C语言与MySQL数据库进行交互的重要工具。它提供了一系列的函数,使得程序员可以通过编写C代码来执行SQL查询、管理数据库连接和处理查询结果。以下是一些关键知识点: 1. **连接...

    MySql5.1 C API函数描述.doc

    根据给定的文件信息,以下是对MySql5.1 C API函数的详细解析,这些函数在处理数据库操作、用户管理、事务控制等方面扮演着关键角色。 ### 1. `mysql_affected_rows()` 此函数用于返回上一次SQL语句执行后受影响的...

    MySQLAPI.rar

    MySQL C API是MySQL官方提供的一个C语言接口,它提供了连接数据库、发送SQL语句、接收结果集等功能。要使用这个API,开发者需要包含头文件`<mysql.h>`,并链接MySQL客户端库。在C++环境中,我们通常需要包含错误处理...

    一种基于C语言访问MySQL数据库的研究.pdf

    首先,要使用C语言访问MySQL,你需要了解MySQL的C API,这是MySQL提供的一组函数,允许程序员在C程序中执行SQL语句、管理连接、处理结果集等。主要的头文件是`mysql.h`,包含所有必要的声明。你需要在你的项目中包含...

    mysql+api+for+cpp+in+linux基础知识.pdf

    19. `mysql_free_result()`:释放由结果集占用的内存,防止内存泄漏。 20. `mysql_get_client_info()` 和 `mysql_get_client_version()`:分别获取客户端库的版本信息,前者为字符串,后者为整数。 21. `mysql_get...

    VC2008 & MYSQL数据库平台开发文档第二节API函数封装

    在`VC2008搭载MYSQL高性能数据库之函数封装.doc`文档中,可能详细介绍了如何编写这些类,包括错误处理、资源管理(如使用智能指针避免内存泄漏)以及事务处理等方面。错误处理通常通过检查函数返回值和调用`mysql_...

    mysql.zip_c 封装 mysql_mysql 访问包装

    在这个特定的项目中,“mysql.zip_c 封装 mysql_mysql 访问包装”意味着开发者使用C语言创建了一个库或API,使得其他C程序可以更方便、安全地与MySQL数据库进行交互。这个封装可能包括了连接建立、查询执行、结果...

    c语言实现一个简单的mysql client

    - 及时释放资源,避免内存泄漏,使用`mysql_free_result()`和`mysql_close()`。 8. **命令行交互**: - 可能会需要设计一个简单的命令行界面,让用户输入SQL命令并显示结果。 - 使用标准输入/输出(stdin/stdout...

    C语言连接MySQL数据库.docx

    根据提供的文档信息,本文将详细解析如何使用C语言与MySQL数据库...- 处理潜在的内存泄漏问题。 以上就是使用C语言与MySQL数据库进行交互的基本步骤和注意事项。希望这些信息能够帮助读者更好地理解和掌握这一技能。

    使用C语言连接MYSQL数据库源代码

    当需要在C语言程序中与MySQL数据库进行交互时,可以使用MySQL的C API,即MySQL Connector/C。 本项目“使用C语言连接MYSQL数据库源代码”旨在展示如何通过C语言实现对MySQL数据库的连接、查询、插入、更新和删除等...

    vc连接mysql中所需要的mysql头文件

    首先,`mysql.h`是主头文件,包含了大部分的MySQL C API接口。当你在代码中包含这个头文件时,你可以使用如`MYSQL`结构体、`mysql_init()`、`mysql_connect()`等函数来初始化和建立连接。`mysql.h`还会间接地引入...

    mysql-connect.zip_C MYSQL_c mysql_c++ mysql_connect

    例如,我们可以使用智能指针(如`std::unique_ptr`)来自动管理`MYSQL`对象的生命周期,防止内存泄漏。 ```cpp #include std::unique_ptr<MYSQL, decltype(&mysql_free)> conn(mysql_init(nullptr), mysql_free);...

    C/C++ API cppreference API

    C API通常指的是C语言的标准库,如、等头文件中的函数。这些函数包括基本的数据类型操作、内存管理、输入/输出、数学运算等。例如,`printf`用于格式化输出,`malloc`和`free`负责动态内存分配与释放,而`scanf`则...

    C++操作mysql数据库之配置篇

    1. 安装MySQL Connector/C,这是MySQL官方提供的C语言接口。 2. 添加必要的库文件路径到编译器链接器设置中。 3. 引入`mysql.h`头文件到C++源代码中。 4. 使用`mysql_library_init()`初始化MySQL库,然后创建`MYSQL`...

    mysql_include.rar_mysql include_mysql_include_mysql_time.h_mysql

    在C++编程中,为了与MySQL数据库进行交互,开发者通常会使用MySQL的C API,这是一个C语言风格的接口,允许程序员用C或C++编写数据库应用程序。"mysql_include.rar"压缩包文件包含了用于C++开发的MySQL头文件,这些...

Global site tag (gtag.js) - Google Analytics