我希望在给定指向该结构的双指针的情况下将数据复制到struct成员。
我无法更改copyFoo()
的签名。
成员cnt按预期分配了GetCnt()
的返回值,但memcpy
在我这样使用时会创建访问冲突。
当有一个指向struct和void指针成员的双指针时,有人能详细说明如何使用memcpy吗?非常感谢你!
struct mystruct
{
void * data;
unsigned int cnt;
};
void copyFoo( myObj * inBar, mystruct **outFoo)
{
memcpy((*outFoo)->data, inBar->GetData(), inBar->GetLength() );
(*outFoo)->cnt= inBar->GetCnt();
}
int main(void){
myObj *in = getObj();
mystruct *out= new mystruct;
copyFoo(in, &out));
delete in;
delete out;
}
GetData()
成员函数inbar
返回空指针,GetCnt()
返回unsigned int
,GetLength()
返回int
。
答案 0 :(得分:1)
在尝试将数据复制到其中之前,应分配具有适当大小的内存块:
void copyFoo(myObj *inBar, mystruct **outFoo)
{
(*outFoo)->data = malloc(inBar->GetLength()); // <-- THIS
memcpy((*outFoo)->data, inBar->GetData(), inBar->GetLength());
(*outFoo)->cnt= inBar->GetCnt();
}
如果data
的{{1}}成员尚未初始化或指向已释放的内存,mystruct
函数将调用 undefined行为 强>