简体   繁体   English

我的代码片段正在泄露

[英]My code snippet is leaking

The below code snippet leaks when i am trying the build and analyse thing. 当我尝试构建和分析事物时,下面的代码片段泄漏。

What is the problem in this code , pls let me know 这段代码有什么问题,请告诉我

- ( NSString *) getSubCategoryTitle:(NSString*)dbPath:(NSString*)ID{
        NSString *subCategoryTitle;

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    {
        NSString *selectSQL = [NSString stringWithFormat: @"select sub_category_name from sub_categories where id = %@",ID];

        NSLog(@"%@ I am creashes here", selectSQL);

        const char *sql_query_stmt = [selectSQL UTF8String];

        sqlite3_stmt *selectstmt;

        if(sqlite3_prepare_v2(database, sql_query_stmt, -1, &selectstmt, NULL) == SQLITE_OK) 
        {

            while(sqlite3_step(selectstmt) == SQLITE_ROW) 
            {

                subCategoryTitle = [[NSString alloc] initWithUTF8String:
                                    (const char *) sqlite3_column_text(selectstmt, 0)];


            }
        }

        sqlite3_finalize(selectstmt);    

    }   
    sqlite3_close(database); 


    return [subCategoryTitle autorelease];
}

You allocate instance into subCategoryTitle in a loop, but don't release the previous allocation. 您在循环subCategoryTitle实例分配到subCategoryTitle ,但不释放先前的分配。

subCategoryTitle = [[NSString alloc] initWithUTF8String:
                                (const char *) sqlite3_column_text(selectstmt, 0)];

Either (auto)release it, or directly go to the last row, and avoid this while, as it doesn't make much sense. 要么(自动)释放它,要么直接转到最后一行,并避免这样做,因为它没有多大意义。

Example for creating only last object: 仅创建最后一个对象的示例:

char * col_text = NULL;
while(sqlite3_step(selectstmt) == SQLITE_ROW) 
{
    col_text = sqlite3_column_text(selectstmt, 0);
}
if (col_text != NULL)
{
    subCategoryTitle = [[NSString alloc] initWithUTF8String:col_text];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM