memcpy发生错误

时间:2012-11-27 13:40:31

标签: 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);

}

通知显示:“访问冲突读取位置0x00000001” 当我传递参数是void * obj。没有任何问题 谁能帮我? 感谢

3 个答案:

答案 0 :(得分:6)

您已使用类型转换来屏蔽代码中的错误。你需要改变:

Test((void**)obj);

为:

Test(&obj);

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

注意:你可能也应该改变:

void Test(void **obj)

为:

void Test(A **obj)

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

答案 1 :(得分:3)

您没有将指针的地址传递给函数,您传递指针本身,因此函数中的*obj*obj函数中的main相同。 / p>

使用address-of运算符将指针传递给指针:

Test(&obj);

答案 2 :(得分:1)

void main()
{
    A *obj=(A*)malloc(sizeof(A));
    obj->a=1;
    obj->b=2;
    Test((void**)obj); //here is the problem

}

你没有传递* obj的地址,你只是将(A *)转换为(void * **),void

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

}

测试函数中的内存泄漏,'object'被malloced但未释放也没有返回。