使用memcpy将数据复制到结构成员,给出一个指向结构的双指针

时间:2013-10-01 16:21:39

标签: c++ memcpy

我希望在给定指向该结构的双指针的情况下将数据复制到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 intGetLength()返回int

1 个答案:

答案 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行为