在这个过程中,我试图将字符串'c'的'b'字符复制到字符串数组中。所以我创建了一个局部变量'ans'。 如果我像我一样自由地打电话,我的程序不输出任何东西(因为我自由了),而valgrind给了我一堆错误。如果我不自由呼叫,我只会收到1个内存泄漏错误。我如何免费'ans'?
void foo(void**av, void*bv, void*cv) {
char** a = (char**) av;
intptr_t b = (intptr_t) bv;
char* c = (char*) c;
char* ans = malloc(b*sizeof(char));
int i = 0;
while(c[i]!=0 && i<b)
ans[i] = c[i++];
ans[i] = 0;
*a = ans;
free (ans);
}
答案 0 :(得分:3)
我认为你误解了free (ans);
的所作所为。它不会释放ans
本身 - 它仍具有与以往相同的价值。它会释放您在调用malloc
时分配的块。由于呼叫者仍然需要访问该块(这就是你*a = ans;
的原因 - 让呼叫者访问你分配的内存),除了呼叫者之外你不能释放它他们已经完成了它。