在C中的程序中免费拨打电话

时间:2015-03-16 06:26:05

标签: c free

在这个过程中,我试图将字符串'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);
}

1 个答案:

答案 0 :(得分:3)

我认为你误解了free (ans);的所作所为。它不会释放ans本身 - 它仍具有与以往相同的价值。它会释放您在调用malloc时分配的块。由于呼叫者仍然需要访问该块(这就是你*a = ans;的原因 - 让呼叫者访问你分配的内存),除了呼叫者之外你不能释放它他们已经完成了它。