2014-10-13 3 views
0

나는 데이터베이스에서 값을 얻을과 같이 전역 변수에 저장하는 것을 시도하고와 "크기 1의 잘못된 읽기": 나는 "잘못된 읽기를 얻고,으로 mysql_free_result

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); 

을하지만, 크기 1의 "Valgrind, 내 global_variable 액세스하려고 할 때마다.

==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) 
... 

내가 뭘 잘못하고 있니?

답변

1

실제 데이터가 아닌 포인터 만 저장하면됩니다. mysql_free_result을 호출하여 데이터가 free'd 인 경우 global_variable은 안전하지 않은 메모리에 대한 매끄러운 포인터입니다.

당신은 당신의 자신의 버퍼에 row[1]의 내용이 나중에 사용하거나 mysql_free_result를 호출하기 전에 그것을 사용할 수 memcpy 또는 strncpy해야합니다.

복사 할 행 길이를 검색하는 방법은 http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-lengths.html을 참조하십시오.