如果使用函数 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 动态分配的内存;调用者应该释放结果.
如果外面有人不释放资源,那么它就会泄漏,但在外部代码中,而不是在这个函数中。
我认为这段代码会泄露,除非在 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 动态分配的内存;调用者应该释放结果.
如果外面有人不释放资源,那么它就会泄漏,但在外部代码中,而不是在这个函数中。