Я пытаюсь вернуть указатель из функции и использовать возврат в другой функции, но я получаю утечку памяти.
Контрольный код, который я написал и обнаружил с утечкой памяти с помощью CPPCheck.Утечка памяти в C и C++ Код
########################################################################
# include <stdio.h>
# include <malloc.h>
# include <string.h>
char* replace (char* st, char* word, char *replaceWith);
int main (void)
{
char str[] = "Hello how are ## and what are ## doing ?";
char word[]="##";
char replaceWith[]="you";
printf("%s",replace(str,word,replaceWith));
getchar();
return 0;
}
char* replace(char* st,char* word,char *replaceWith)
{
int i = 0;
char *sr,*s,*ret;
int oldlen;
int count = 0;
int newlen;
int stlen;
s=(char *)malloc(strlen(st) + 1);
strcpy(s, st);
oldlen=strlen(word);
newlen=strlen(replaceWith);
for (i = 0; s[i]! = '\0';)
{
if(memcmp(&s[i], word, oldlen) == 0)
{
count++;
i+=oldlen;
}
else
{
i++;
}
}
sr= (char *) malloc (i+1+count*(newlen-oldlen));
ret = (char *) malloc (i+1+count*(newlen-oldlen));
ret=sr;
while(*s)
{
if(memcmp(s, word, oldlen) == 0)
{
memcpy(sr, replaceWith, newlen);
s+ = oldlen;
sr+ = newlen;
}
else
{
*sr++ = *s++;
}
}
*sr = '\0';
return ret;
}
Вы должны вызвать функцию free() для каждого указателя, выделенного malloc. – Sandy
Я пытался позвонить бесплатно. Я могу позвонить бесплатно для sr и s, насколько я понимаю, но когда я вызываю сбой кода и как на «ret», я не могу назвать бесплатный метод замещения, который я пытался связать с ответственностью за вызывающий контекст. Тем не менее он падает. –
сохранить возвращаемое значение функции replace в переменной, а затем вызывать свободную от основной функции. – Sandy