Показывает ли ваша аппаратура фактическую утечку или потенциальную утечку?
Использование realloc()
, как вы, приведет к утечке памяти , если realloc()
не удастся. В этом случае он вернет NULL
, но не освободит исходный блок. Таким образом, вы потеряете указатель на блок и не сможете его освободить (если указатель не хранится в другом месте).
Но это должно быть редким явлением (т. Е. Когда вы исчерпали память).
Если это то, на что жалуются ваши инструменты, вы сможете исправить предупреждение об утечке примерно так:
void AddChToString(char **str,char ch){
int len=(*str)?strlen(*str):0;
char* tmp = realloc(*str, len+2);
if (!tmp) {
// whatever error handling is appropriate
}
(*str)=tmp;
(*str)[len]=ch;
(*str)[len+1]='\0';
}