2017-08-07 67 views
1

我iOS應用在Xcode模擬器終止由於EXC_BAD_INSTRUCTION(代碼= EXC_i386_INVOP)錯誤上下面的行iOS應用上sqlite3_reset崩潰與EXC_BAD_INSTRUCTION

sqlite3_reset(stmt); 

的代碼的完整塊是

-(BOOL)containsPendingSignature 
{ 
sqlite3_stmt *stmt = nil; 

const char* sql = "SELECT Count(*) FROM pending_signatures"; 
if(sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK) 
NSAssert1(0, @"Error:'%s'", sqlite3_errmsg(database)); 


int rowCount = 0; 
if(sqlite3_step(stmt) == SQLITE_ROW) { 
    rowCount = sqlite3_column_int(stmt, 0); 
} 

sqlite3_reset(stmt); 
sqlite3_finalize(stmt); 
return rowCount > 0; 
} 

能任何一個請在這裏建議有什麼問題,提前謝謝。

+0

那是因爲你沒有在每次使用後關閉數據庫..... – Dhiru

+0

https://stackoverflow.com/questions/40394876/sqlite -error-exc-bad-instruction-code-exc-i386-invop-subcode-0x0-ios看看這個,,,,,, – Dhiru

回答

2

這類問題的解決方法是,您可能會丟失下面的語句。

sqlite3_finalize(statement); 
     sqlite3_close(database); 

sqlite3_open() 
sqlite3_prepare_v2() 

後,我們應該始終敲定語句和return語句之前關閉數據庫。不要離開數據庫。 沒有敲定聲明,但不關閉數據庫,如果你試圖再次打開它sqlite3_open()

sqlite3_prepare_v2() 

這將導致EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)關於數據庫。

-(BOOL)containsPendingSignature 
    { 
    sqlite3_stmt *stmt = nil; 

    const char* sql = "SELECT Count(*) FROM pending_signatures"; 
    if(sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK) 
    NSAssert1(0, @"Error:'%s'", sqlite3_errmsg(database)); 


    int rowCount = 0; 
    if(sqlite3_step(stmt) == SQLITE_ROW) { 
     rowCount = sqlite3_column_int(stmt, 0); 
    } 

    sqlite3_finalize(statement); 
    sqlite3_close(database); 
    return rowCount > 0; 
    } 

我希望這將幫助你....

+0

謝謝你的回覆。我試着加上'sqlite3_close(數據庫);'但錯誤依然存在。 如果我在以前的功能添加這個呢? – Yas

+0

是,,,在所有funtions,,,,, – Dhiru

+0

你應該在所有的功能添加完成並關閉聲明。 – Dhiru