-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 を解放することはできませんvoid**

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