2017-08-07 1 views
1
とsqlite3_resetにクラッシュ

私のiOSアプリが原因次の行にEXC_BAD_INSTRUCTION(コード= EXC_i386_INVOP)エラーのiOSアプリケーションはEXC_BAD_INSTRUCTION

sqlite3_reset(stmt); 

にXcodeのシミュレータで終了するコードの完全なブロックは

-(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; 
} 

でしたですいずれか1つは間違っていることをお勧めします、事前にありがとうございます。

+0

それはあなたがすべての使用後に、データベースを閉じていないので..... – Dhiru

+0

https://stackoverflow.com/questions/40394876/sqlite -error-exc-bad-instruction-code-exc-i386-invop-subcode-0x0-iosこれを見てください,,,,,, – Dhiru

答えて

2

このタイプの問題の解決策は、あなたは以下の声明に欠けている可能性があります。私たちは、常に文を確定し、returnステートメントの前にデータベースを閉じる必要があり、すべての

sqlite3_open() 
sqlite3_prepare_v2() 

sqlite3_finalize(statement); 
     sqlite3_close(database); 

。データベースを開いたままにしないでください。文を確定せずに、あなたは再びそれが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(database);'を追加しようとしましたが、エラーはまだあります。 これを以前の関数でも追加する必要がありますか? – Yas

+0

はい、すべてfuntions ,,,,, – Dhiru

+0

すべての関数でfinalizeとclose文を追加する必要があります。 – Dhiru

関連する問題