我从大学的PowerPoint演示文稿中获得了这段代码,我不知道释放什么指针。该函数应连接n个字符串。对不起,我的语法不好,突出显示了该网站的新内容。
我尝试在tmp和结果上使用free(),但是我得到的一切都是分段错误,或者free()是无效的指针。如果我以这种方式离开,我会认为存在一些内存泄漏。
char * connect(int n, ...)
{
char * result = "", * next;
va_list args; va_start(args,n);
for(int i = 0; i<n; i++)
{
int j,k;
next = va_arg(argumenti, char *);
int len = strlen(result) + strlen(next) + 1;
char * tmp = (char *)malloc(len);
for(j=0; result[j]; j++) tmp[j] = result[j];
for(k=0; tmp[j+k] = next[k];k++);
if(n) free(result);
result = tmp;
}
va_end(args);
return result;
}
答案 0 :(得分:1)
每个free
必须精确匹配一个malloc
。在您发布的代码中,result
被释放但从未被分配,这是一个明显的错误,而tmp
被释放但从未被释放。
旁注:if(n)
是无用的,n
在那里总是非零的,因此应删除该条件,因为它只会混淆代码。