mysql_use_result踩着用过的内存Ansi-C

时间:2011-04-16 02:47:47

标签: mysql c

我遇到了一个问题而且让我疯狂。

在一个名为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是一个链表。

theres是我需要知道的事情?

1 个答案:

答案 0 :(得分:0)

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

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;(假设它不是静态存储持续时间)只是创建一个指向任意位置的指针,除非你初始化它,否则使用它可能会导致你非常悲伤。

修复可能只是替换:

MYSQL *conn;

使用:

MYSQL *conn = mysql_init (NULL);

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