我遇到了一个问题而且让我疯狂。
在一个名为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是我需要知道的事情?
答案 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()
。