gpt4 book ai didi

MySQL 重新启动会导致使用 M​​ySQL C API 的双重释放或损坏

转载 作者:行者123 更新时间:2023-11-30 18:03:16 26 4
gpt4 key购买 nike

我有一个c程序,用于维护持久的MySQL连接,版本5.1.46。如果我在程序运行时重新启动 mysql,则会出现双重释放或损坏错误,如下所示:

# /etc/init.d/mysql restart
Shutting down MySQL........ [ OK ]
Starting MySQL.*** glibc detected *** /home/user/a.out: double free or corruption (!prev): 0x000000000b64dd00 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3739471634]

我期望连接自动重新连接,因为我已经设置了 MYSQL_OPT_RECONNECT 选项并且尚未显式关闭此连接。另外,我正在执行的查询不是我不小心设置为 NULL 或释放的 char*,它是一个常量、双引号字符串。

以下是 gdb 中生成的核心文件中的几行

#11 0x000000000044ed71 in mysql_send_query (mysql=0x41966aa0, query=0x41966100 "SELECT count (*) from TableA", length=27) at client.c:2894
#12 0x000000000044edd9 in mysql_real_query (mysql=0x602a, query=0x602d <Address 0x602d out of bounds>, length=6) at client.c:2905
#13 0x000000000042b42f in do_query (conn=0x41966aa0, msg=0x41966100 "SELECT count(*) from TableA") at dosql.cpp:20

知道为什么会发生这种情况吗?

最佳答案

Any ideas why this might be occurring?

由于 MySQL 中的错误。

您可以尝试更新到更高版本的软件包,看看问题是否消失。

或者,在 Valgrind 下运行客户端程序,它将以可用于修复错误的方式报告错误。特别是,它将报告

  • 分配内存的堆栈跟踪
  • 堆栈跟踪已释放的位置
  • 发生双重释放的堆栈跟踪(应与 GDB 堆栈跟踪相同)

鉴于该信息,您可以向 MySQL 开发人员报告该错误,并希望它最终能够得到修复。

关于MySQL 重新启动会导致使用 M​​ySQL C API 的双重释放或损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com