如果我像这样分配一个void指针,那么在尝试释放指针时我会遇到访问冲突。
int Foo(void* ptr)
{
*((void**)ptr) = malloc(25);
((char*)ptr)[0] = 'A';
free(ptr); //crashes access violation
}
如果我将void指针传递给函数并尝试将其释放到函数
之外,则会发生同样的情况int main()
{
void* ptr;
Foo(&ptr);
printf("%s \n", (char*)&ptr); //works
free(ptr); //crashes access violation
retun 0;
}
任何线索如何释放这个指针?
答案 0 :(得分:3)
您不是要尝试释放相同的指针,请尝试free(*((void**)ptr));
答案 1 :(得分:2)
这是错误的,你不能在你的函数中释放ptr,以避免混淆void**
:
int Foo(void** ptr)
{
*ptr = malloc(25);
((char *)*ptr)[0] = 'A';
free(*ptr);
}