-2

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

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

4

2 回答 2

3

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

于 2013-01-30T20:02:53.833 回答
2

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

int Foo(void** ptr)
{
   *ptr = malloc(25);
   ((char *)*ptr)[0] = 'A';
   free(*ptr); 
}
于 2013-01-30T20:03:31.490 回答