-6

私はこの実装を持っています:

//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()でクリーンアップされますか?

4

2 に答える 2

2

コードにはさまざまなエラーがあります。まず、data割り当てられたメモリを指していません。第二に、memcpy自明にコピーできないユーザー定義の型では機能しません。MyData代わりに、の代入演算子を使用できます。

void myMethod1(Mydata &otherdata)
{
  *data = otherdata;
}
于 2013-02-04T17:23:48.810 に答える
0

juanchopanzaの答えに追加:

コードにタイプミスがあると仮定して (実際にタイプミスがある場合memcpy())

memcpy(&data, &otherdata, sizeof(otherdata));dataはすでにポインターであるため、正しく機能しません。ポインタの「&」はポインタのアドレスです=単に間違った使い方memcpy

于 2013-02-04T17:26:59.960 に答える