mysql_init()函数需要哪个库?_C++使用mysql 库访问MYSQL数据库,mysql_init函数破坏内存的问题...

在最近的一个项目中用到了MYSQL,前一段时间倒没有发现什么问题,直到今天发现了一个很奇怪的问题。

定义了一个数据库访问类:

class CMysql{

private:

MYSQL m_connectSQL;

string host;

string usr;

string password;

......

BOOL init();

}

在init()函数中调用mysql的库函数  mysql_init()(此函数即是将m_connectSQL的内存全置为0,而且还会初始化一些线程私有数据。 mysql_init()中通过调用my_thread_init(),来设置线程私有数据。

问题来了。

初始化 m_connectSQL时,发现类CMysql的一个实例的内存遭到了破坏,因为当我初始化 MYSQL类型的变量m_connectSQL时,还会将对象中的 host,usr,password成员的内存区也置为0。

百思不得其解,请教了一博士生学长后,还是不得其解,两人想出多种方案一一验证还是未能解决。为什么会发生内存覆盖或者说是重写呢?

忽然想到之前看到过的MYSQL结构体的定义,其中有一些成员是根据版本去定义的,如果是{头文件,lib文件(因为是静态链接的)}和dll 文件版本不一致,即,我使用的头文件和lib 文件版本较老,而dll 的版本较新,则会发生  实际调用的 mysql_init()函数会尝试初始化  MYSQL 结构体中 不存在的成员(因为在老版的头文件中未定义),所以,这时发生内存破坏是正常的!我立马比对两个版本,果然不一样!因为代码和DLL文件是放在一起由我在实验室拷贝回寝室的,而头文件和lib文件则是我笔记本上本来就有的,替换为对应的版本后,果然没有问题了!  : )

发生这种未定义的行为竟然是由于版本不同造成的!

可见,在编程工作中,一定要细心啊!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值