首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql_use_result践踏已用内存Ansi-C

mysql_use_result践踏已用内存Ansi-C
EN

Stack Overflow用户
提问于 2011-04-16 10:47:47
回答 1查看 471关注 0票数 0

我有个问题,快把我逼疯了。

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

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

示例

代码语言:javascript
复制
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是一个链表。

有什么我需要知道的吗?

EN

回答 1

Stack Overflow用户

发布于 2012-01-24 15:12:28

如果,如您的注释所示,您的代码如下:

代码语言:javascript
复制
MYSQL *conn;
if (!mysql_real_connect(conn, blah, blah, blah)) {
    return 1;
}

那么你就违反了规则,所有的赌注都被取消了。MySQL documentation page for mysql_real_connect()声明:

MYSQL第一个参数应该是现有

结构的地址。在调用mysql_real_connect()之前,必须先调用mysql_init()来初始化MYSQL结构。

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

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

代码语言:javascript
复制
MYSQL *conn;

通过以下方式:

代码语言:javascript
复制
MYSQL *conn = mysql_init (NULL);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5684178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档