在函数C中分配void指针

时间:2013-01-30 19:59:29

标签: c pointers malloc free

如果我像这样分配一个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;
}

任何线索如何释放这个指针?

2 个答案:

答案 0 :(得分:3)

您不是要尝试释放相同的指针,请尝试free(*((void**)ptr));

答案 1 :(得分:2)

这是错误的,你不能在你的函数中释放ptr,以避免混淆void**

int Foo(void** ptr)
{
   *ptr = malloc(25);
   ((char *)*ptr)[0] = 'A';
   free(*ptr); 
}