如果指针的类型改变,可以释放内存吗?

时间:2013-06-13 15:05:40

标签: c pointers malloc free

给定内存分配:

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); 
}

它们都可以,或者只是第二个可以吗?为什么呢?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

是的,是的。

free()正在等待void指针时,如果需要,编译器会将指针转换为void *