2016-02-28 177 views
0

该代码为“p”变量分配内存,但如果在运行此代码时没有错误,我认为它不能释放它。我对吗?或者它可以在程序的其他地方免费使用?这是内存泄漏吗?

static NSVGparser* nsvg__createParser() 
{ 
    NSVGparser* p; 
    p = (NSVGparser*)malloc(sizeof(NSVGparser)); 
    if (p == NULL) goto error; 
    memset(p, 0, sizeof(NSVGparser)); 

    p->image = (NSVGimage*)malloc(sizeof(NSVGimage)); 
    if (p->image == NULL) goto error; 
    memset(p->image, 0, sizeof(NSVGimage)); 

    // Init style 
    nsvg__xformIdentity(p->attr[0].xform); 
    memset(p->attr[0].id, 0, sizeof p->attr[0].id); 
    p->attr[0].fillColor = NSVG_RGB(0,0,0); 
    p->attr[0].strokeColor = NSVG_RGB(0,0,0); 
    p->attr[0].opacity = 1; 
    p->attr[0].fillOpacity = 1; 
    p->attr[0].strokeOpacity = 1; 
    p->attr[0].stopOpacity = 1; 
    p->attr[0].strokeWidth = 1; 
    p->attr[0].strokeLineJoin = NSVG_JOIN_MITER; 
    p->attr[0].strokeLineCap = NSVG_CAP_BUTT; 
    p->attr[0].fillRule = NSVG_FILLRULE_NONZERO; 
    p->attr[0].hasFill = 1; 
    p->attr[0].visible = 1; 

    return p; 

error: 
    if (p) { 
     if (p->image) free(p->image); 
     free(p); 
    } 
    return NULL; 
} 

回答

1

客户端代码,预计使用返回解析器以释放其分配的资源后致电nvsg_deleteParser()功能:

NSVGparser *parser = nsvg__createParser(); 
if (parser) 
{ 
    ... 
    nvsg_deleteParser(parser); 
}