C++ 如果函数relace1()的使用不';是否删除cc分配的内存?
我认为这段代码会泄漏,除非在replace1()之外有人删除cc=new[..]分配的内存,你能确认吗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] == ' ')
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()
todelete[]的调用方
该内存,否则它将泄漏。您的函数将指向分配内存的指针传递回调用代码。它将此内存的所有权传递给调用方。这意味着函数不会泄漏,前提是调用代码接收指针并跟踪它(并最终释放内存)
换言之,这段代码没有任何泄漏的嫌疑。从防止内存泄漏的角度来看,这段代码没有任何错误
如果您的程序泄漏此内存,则是调用代码的错误,而不是此函数的错误。否,此代码不泄漏-它返回资源。一切正常
作为该函数文档的一部分,它应该类似于-返回动态分配的内存;调用方应该释放结果
如果外部有人没有释放该资源,则该资源将泄漏,但在外部代码中,而不是在该函数中。返回已分配内存的错误做法-您可能会使用unique_ptr(共享_ptr) instead@DieterLCUKIN:一个坏的做法可能是使用裸指针来处理分配的内存,而不是使用<代码> UnQuyPPTR 或<代码> SydDypTr> /Cord>。返回内存本身并没有错。也可以指出,问题只是名义上的C++。