我试图使用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.没有任何问题任何人都可以帮助我吗?谢谢
您已使用类型转换来掩盖代码中的错误.你需要改变:
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 **这里使用.