C语言 通过union共存体释放常量指针指向的堆空间
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;
}