memcpy发生错误

Ngọ*_* Đỗ 3 c

我试图使用memcpy()函数,但发生错误:

typedef struct
    {
        int a;
        int b;
    }A;

void Test(void **obj)
{
    A *object=(A*)malloc(sizeof(A));

    memcpy(object,*obj,sizeof(A));//program crash here
    printf("a=%d\n",object->a);
    printf("b=%d\n",object->b);
    free(*obj);
    *obj=NULL;

}
void main()
{
    A *obj=(A*)malloc(sizeof(A));
    obj->a=1;
    obj->b=2;
    Test((void**)obj);

}
Run Code Online (Sandbox Code Playgroud)

通知显示:"访问冲突读取位置0x00000001" 当我传递参数是void*obj.没有任何问题任何人都可以帮助我吗?谢谢

Pau*_*l R 6

您已使用类型转换来掩盖代码中的错误.你需要改变:

Test((void**)obj);
Run Code Online (Sandbox Code Playgroud)

至:

Test(&obj);
Run Code Online (Sandbox Code Playgroud)

带回家的消息:每当你觉得你需要使用类型转换时,问问自己为什么 - 在大多数情况下,这是错误的解决方案,只会掩盖更严重的问题.

注意:您可能还应该更改:

void Test(void **obj)
Run Code Online (Sandbox Code Playgroud)

至:

void Test(A **obj)
Run Code Online (Sandbox Code Playgroud)

因为没有充分的理由在void **这里使用.