C语言 通过union共存体释放常量指针指向的堆空间

发布时间 2023-10-15 10:47:28作者: 王景迁

union共存体中所有成员占用相同的内存空间。
因为free函数参数是void *,常量指针是const void *,所以free函数释放常量指针时会因类型不同而失败。

#include <stdio.h>
#include <malloc.h>
#include <string.h>

typedef union _const_ptr
{
    const void *cp;
    void *vp;
} const_ptr;

void free_const_ptr(const void *cp)
{
    if (!cp)
    {
        return;
    }

    const_ptr ptr = {.cp = cp};
    free(ptr.vp);
}

int main()
{
    char a[20] = "123";
    const char *b = strdup(a);
    printf("%s\n", b);
    // free(b);
    free_const_ptr(b);
    return 0;
}