Я думаю, что этот код просачивается, если только внешний replace1() кто-то удаляет память, выделенную cc = new [....], можете ли вы подтвердить?Происходит ли утечка этого кода, если использование функции relace1() не удаляет память, выделенную cc?
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;
}
Неправильная практика возврата выделенной памяти - вместо этого вы можете использовать unique_ptr (shared_ptr) –
@Dieter Lücking: Плохая практика может заключаться в работе с выделенной памятью с использованием * голых указателей *, в отличие от использования 'unique_ptr' или' shared_ptr '. Нет ничего плохого в * возврате * выделенной памяти как таковой. Можно также указать, что вопрос только номинально C++. Это имеет смысл и в вопросе C. – AnT