如何使用此功能释放内存?

时间:2019-09-08 13:10:44

标签: c++ c memory memory-management

我从大学的PowerPoint演示文稿中获得了这段代码,我不知道释放什么指针。该函数应连接n个字符串。对不起,我的语法不好,突出显示了该网站的新内容。

我尝试在tmp和结果上使用free(),但是我得到的一切都是分段错误,或者free()是无效的指针。如果我以这种方式离开,我会认为存在一些内存泄漏。

char * connect(int n, ...)
{
    char * result = "", * next;
    va_list args; va_start(args,n);
    for(int i = 0; i<n; i++)
    {
        int j,k;
        next = va_arg(argumenti, char *);
        int len = strlen(result) + strlen(next) + 1;
        char * tmp = (char *)malloc(len);
        for(j=0; result[j]; j++) tmp[j] = result[j];
        for(k=0; tmp[j+k] = next[k];k++);
        if(n) free(result);
        result = tmp;
    }
    va_end(args);
    return result;
}

1 个答案:

答案 0 :(得分:1)

每个free必须精确匹配一个malloc。在您发布的代码中,result被释放但从未被分配,这是一个明显的错误,而tmp被释放但从未被释放。

旁注:if(n)是无用的,n在那里总是非零的,因此应删除该条件,因为它只会混淆代码。