0

我想将数据复制到一个结构成员,给定一个指向该结构的双指针。我无法更改 的签名copyFoo()GetCnt()成员 cnt 被分配了预期的返回值,但是memcpy当我像这样使用它时会产生访问冲突。当我有一个指向结构的双指针和一个 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返回一个 void 指针,GetCnt()返回unsigned intGetLength()返回一个int.

4

1 回答 1

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成员mystruct尚未初始化或指向已释放的内存,则copyFoo函数调用未定义的行为

于 2013-10-01T16:27:08.077 回答