我修改了以下代码
void aligned_free(void *p) {
free(((void**) p)[-1]);
}
到
void aligned_free(void **p) {
free((p)[-1]);
}
带函数调用
char* a = (char*)aligned_malloc(10000,64);
aligned_free(a);
并且编译器给出了错误"无法从char *转换为void **"。为什么指针char *不能转换为void **,但void *是否正常?
答案 0 :(得分:5)
void *
是一个通用指针。 void *
类型的对象可以指向任何内容。但是,void **
只能指向void *
类型的对象。 char
不是void *
,因此转换失败。