0

我正在尝试从数据库中获取一个值并将其存储在一个全局变量中,如下所示:

mysql_query(con, query);
MYSQL_RES *result = mysql_store_result(con);
if ((row = mysql_fetch_row(result)))    
{
    global_variable = row[1];  
}  
mysql_free_result(result);

但是,每当我尝试访问我的 global_variable 时,我都会在 Valgrind 中收到“大小为 1 的无效读取”。

==13345== Invalid read of size 1
...
==13345==  Address 0x60a3fea is 74 bytes inside a block of size 8,160 free'd
...
==13345==    by 0x4E67E9C: mysql_free_result (in /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0)
...

我究竟做错了什么?

4

1 回答 1

1

您只是保存指针,而不是实际数据。数据是free'd通过调用mysql_free_resultglobal_variable然后你只是一个指向不安全内存的悬空指针。

您需要memcpy或您自己缓冲区中strncpy的内容row[1]稍后使用它,或者您可以在调用之前使用它mysql_free_result

请参阅http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-lengths.html了解如何检索行长度以复制它们。

于 2014-10-13T09:46:12.547 回答