我尝试使用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。没有任何问题 谁能帮我? 感谢
答案 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但未释放也没有返回。