函数调用参数是未初始化的值?

时间:2011-11-27 00:40:00

标签: iphone objective-c xcode ipad sqlite

我一直试图弄清楚为什么Xcode中的Analyzer似乎喜欢这个代码,所以也许有人可以看出出了什么问题。给我这样的信息:"函数调用参数是一个未初始化的值"。

这条线路存在问题,并抱怨"声明":

if (sqlite3_exec(MysDB, delete_stmt, NULL, statement, NULL) == SQLITE_OK) {

实际代码:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
    sqlite3_stmt *statement;
    const char *dbpath = [databasePath UTF8String];

    if (sqlite3_open(dbpath, &MyDB) == SQLITE_OK)
    {
        NSString *deleteSQL = [NSString stringWithFormat:@"DELETE FROM DATATABLE WHERE ID = %d", recordID];

        const char *delete_stmt = [deleteSQL UTF8String];
        if (sqlite3_exec(MysDB, delete_stmt, NULL, statement, NULL) == SQLITE_OK) {

            NSLog(@"Deleted");            
        }else{
            NSLog(@"Not Deleted");
        }
        sqlite3_close(MyDB);
    }
}

More Code Here Removed on Purpose...
}

3 个答案:

答案 0 :(得分:3)

制作时,您不会将sqlite3_stmt *statement;(在if (buttonIndex == 1) {下面)初始化为任何特定值。你在sqlite3_exec3()函数中使用它。

答案 1 :(得分:1)

sqlite3_exec的第3个参数是回调函数,在您的示例中当前为NULL。第四个参数是此回调的参数。

http://www.sqlite.org/c3ref/exec.html

所以,我认为它不喜欢你给NULL回调函数提供一个实际参数的事实。

答案 2 :(得分:0)

我想你可能会在这一行上写错字。 sqlite3_exec的第一个参数MysDB应该是MyDB