如果其指针已更改类型,是否可以释放内存?

标签 c pointers malloc free

给定内存分配:

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

然后在某个地方,例如,在一个函数中,有 2 个选择:

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

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

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

两个都OK还是只有第二个OK?为什么?

最佳答案

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

关于如果其指针已更改类型,是否可以释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17090538/

相关文章:

c - 关于双指针和三指针/双维数组

c - 使用 g_ptr_array 时出现错误 : g_ptr_array_add: assertion 'rarray' failed on c,

c - 如何将数据从 C 传递到汇编

c - MAP_ANON 和 MAP_ANONYMOUS 都未在 C 中为 sys/mmap 声明

c++ - C 取消引用指向不完整类型的指针时出错

c++ - 指向类数据成员 "::*"的指针

c++ - 节点指针内部的指针

使用 char 数组作为内存的自定义 malloc 实现

linux - 另一个程序是否有可能在分配后重新使用空闲内存,然后由其他已经运行的程序释放?

c - 来自简单 c while 循环的意外行为