1

给定内存分配:

struct typeA *p = malloc(sizeof(struct typeA));

然后某处,例如,在一个函数中,有两个选择:

void func(void *q)
{
     ....
    free(q);
}

void func(void *q)
{
    ....

    struct typeA *pp = (struct typeA *)q;
    free(pp); 
}

他们两个都可以,还是只有第二个可以?为什么?

4

3 回答 3

2

两者都可以。free()只关心存储在指针中并且在转换时不会改变的地址。

于 2013-06-13T15:08:00.273 回答
1
struct typeA *pp = (struct typeA *)q;

这种类型转换是不必要的。此外,free参数的类型是指向void. 因此,该函数无法知道用于访问对象的左值的类型*pp。它只接收一个原始指针。

于 2013-06-13T15:09:36.820 回答
1

是的。

free()等待 void 指针一样,void *如果需要,编译器会将指针转换为。

于 2013-06-13T15:12:01.537 回答