0
我有一些C代碼在啓動時初始化的嵌入式設備上運行。代碼使用簡單的名稱/值表查詢小型數據庫。我注意到,大約1時20代碼運行失敗,在一些記錄加入後,我發現了以下消息:間歇段錯誤使用libsqlite3,「錯誤4在libsqlite3.so.0.8.6」
user.info kernel: [ 47.983041] my_code[2237]: segfault at bf87601f ip b78b7115 sp bf8758f0 error 4 in libsqlite3.so.0.8.6[b7872000+51000]
處理該數據庫查詢功能是:
void my_db_query(char* my_setting, char* my_result)
{
sqlite3 *db;
if(sqlite3_open("/tmp/system.db", &db) != 0){
printf("Failed to Open DB\n");
}
char query_string[100];
memset(query_string, 0, 100);
char* query_one = "select value from setting where name=\"";
char* query_two = "\";";
char db_result[256];
int ret;
strcat(query_string, query_one);
strcat(query_string, my_setting);
strcat(query_string, query_two);
sqlite3_stmt* stmt;
ret = sqlite3_prepare_v2(db, query_string, 1000, &stmt, 0);
if (ret != SQLITE_OK){
printf("Error preparing\n");
}
while (sqlite3_step(stmt) == SQLITE_ROW) {
strcpy(db_result,(char*)sqlite3_column_text(stmt, 0));
strncpy(my_result,db_result, strnlen(db_result, 256));
}
sqlite3_close(db);
}
我m使用sqlite3版本3.6.11,並且我無法更改該版本,因爲我沒有權限。任何建議將受到感謝。