我有这个实现:
//header file:
InfoTables* localInforTable;
typedef txdr_int32 InfoTable;
typedef struct
{
int sendID;
InfoTable *data;
} InfoTables;
// in cpp file
void Retrieval::InfoTableCallBack(int sendID,
InfoTables& infoTables)
{
localInforTable = new InfoTables();
localInforTable.sendId=sendID;
localInforTable->data = infoTables.data;
printf("Data %d, %d\n", localInforTable.sendId, localInforTable->data[0]); // correct data
}
void Retrieval::CheckInfoData()
{
printf("Data %d, %d\n", localInforTable.sendId, localInforTable->data[0]); // sendID is OK but data9[0] is just printing the address
}
我想将方法InforTableCallBack中的inforTables复制到我可以用于其他方法的局部变量。但是,CheckInfoData()?
中的数据是清理的答案 0 :(得分:2)
代码存在各种错误。首先,data
不指向任何已分配的内存。其次,memcpy
根本不适用于不易于复制的用户定义类型。您可以改为使用MyData
的赋值运算符:
void myMethod1(Mydata &otherdata)
{
*data = otherdata;
}
答案 1 :(得分:0)
添加到juanchopanza的答案:
假设代码有拼写错误(如果真的是memcpy()
)
memcpy(&data, &otherdata, sizeof(otherdata));
将无法正常工作,因为data
已经是指针。和'&'在指针上是指针的地址=只是错误地使用了memcpy