我正在尝试从数据库中获取值并将其存储在全局变量中,如下所示:
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)
...
我做错了什么?
答案 0 :(得分:1)
您只是保存指针,而不是实际数据。通过调用free'd
,数据为mysql_free_result
,您的global_variable
只是指向不安全内存的悬空指针。
您需要memcpy
或strncpy
您自己缓冲区中row[1]
的内容以便稍后使用,或者您可以在调用mysql_free_result
之前使用它。
有关如何检索行长以复制它们的信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-lengths.html。