gpt4 book ai didi

mysql_use_result 踩踏已用内存 Ansi-C

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

我遇到了一个问题,它让我发疯。

在一个名为cargo_id_whitelist(MYSQL * conexion,struct info * data)的函数中

我执行了 mysql 查询。但每次我调用 mysql api 函数时mysql_use_res(conexion) 它会破坏已用内存,破坏数据(主要是数据结构)

示例

printf("-kind-> %d \n",conf_var->next->next->id) //work its display the third node id info;
res=( MYSQL_RES *)mysql_use_result(conexion); //this break my memory
printf("puntero %p \n",res);
printf("-kind-> %d \n",conf_var->next->next->id); //segfault

conf_var 是一个链表。

有什么我需要知道的吗?

最佳答案

如果如您的评论中所示,您的代码如下:

MYSQL *conn;
if (!mysql_real_connect(conn, blah, blah, blah)) {
return 1;
}

那么你就违反了规则,所有的赌注都失败了。 MySQL documentation page for mysql_real_connect()状态:

The first parameter should be the address of an existing MYSQL structure. Before calling mysql_real_connect() you must call mysql_init() to initialize the MYSQL structure.

语句MYSQL *conn;(假设它不是静态存储持续时间)只是创建一个指向任意位置的指针,并且除非您初始化它,否则使用它可能会给您带来很大的悲伤。

修复可能只是简单地替换:

MYSQL *conn;

与:

MYSQL *conn = mysql_init (NULL);

这将为您提供一个正确初始化的对象,然后您可以将其传递给mysql_real_connect()

关于mysql_use_result 踩踏已用内存 Ansi-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684178/

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