如果使用函数 relace1() 不删除由 cc 分配的内存,此代码是否会泄漏?

Does this code leak if use of function relace1() doesn't delete memory allocated by cc?

我认为这段代码会泄露,除非在 replace1() 之外有人删除了 cc = new[....] 分配的内存,你能确认一下吗??

char* replace1(char *c){
    if(c == NULL) return NULL;
    int len = strlen(c);
    if(len == 0) return NULL;
    int cnt = 0;
    for(int i=0; i<len; ++i)
    {
        if(c[i] == ' ')
            ++cnt;
    }
    char *cc = new char[len+2*cnt+1];
    int p = 0;
    for(int i=0; i<len; ++i)
    {
        if(c[i] == ' ')
        {
            cc[p] = '%';
            cc[p+1] = '2';
            cc[p+2] = '0';
            p += 3;
        }
        else
        {
            cc[p] = c[i];
            ++p;
        }
    }
    cc[p] = '[=10=]';
    return cc;
}

这段代码本身并没有泄漏,但是你把它留给 replace1() 的调用者到 delete[] 那块内存,否则它会被泄漏。

您的函数将指向已分配内存的指针传递回调用代码。它将此内存的 所有权 传递给调用者。这意味着该函数不会泄漏,假设调用代码接收到指针并跟踪它(并最终释放内存)。

换句话说,没有什么可以怀疑此代码中的泄漏。从防止内存泄漏的角度来看,这段代码没有任何问题。

如果您的程序泄漏了这段内存,那是调用代码的错,而不是这个函数的错。

不,此代码不会泄漏 - 它 returns 资源。一切正常。

作为此功能文档的一部分,应该类似于 - returns 动态分配的内存;调用者应该释放结果.

如果外面有人不释放资源,那么它就会泄漏,但在外部代码中,而不是在这个函数中。