C++ 如果函数relace1()的使用不';是否删除cc分配的内存?

C++ 如果函数relace1()的使用不';是否删除cc分配的内存?,c++,memory-leaks,C++,Memory Leaks,我认为这段代码会泄漏,除非在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] == ' ')

我认为这段代码会泄漏,除非在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] = '\0';
    return cc;
}
char*replace1(char*c){
如果(c==NULL)返回NULL;
int len=strlen(c);
如果(len==0)返回NULL;
int-cnt=0;

对于(int i=0;i此代码本身不会泄漏,但您将其留给
replace1()
to
delete[]的调用方
该内存,否则它将泄漏。

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

换言之,这段代码没有任何泄漏的嫌疑。从防止内存泄漏的角度来看,这段代码没有任何错误


如果您的程序泄漏此内存,则是调用代码的错误,而不是此函数的错误。

否,此代码不泄漏-它返回资源。一切正常

作为该函数文档的一部分,它应该类似于-返回动态分配的内存;调用方应该释放结果


如果外部有人没有释放该资源,则该资源将泄漏,但在外部代码中,而不是在该函数中。

返回已分配内存的错误做法-您可能会使用unique_ptr(共享_ptr) instead@DieterLCUKIN:一个坏的做法可能是使用裸指针来处理分配的内存,而不是使用<代码> UnQuyPPTR 或<代码> SydDypTr> /Cord>。返回内存本身并没有错。也可以指出,问题只是名义上的C++。