3

I want to serialize/deserialize using BOOST the values (not the pointers) of objects in the following vector:

std :: vector <A*> m_vector; 

To serialize I use the following code:

int nItems = m_vector.size();
ar & nItems;
std::for_each(m_vector.begin(), m_vector.end(), [&ar](A* pItem) {
    ar & *pItem;
});

And to deserialize:

int nItems;
ar & nItems;
for (int i = 0; i < nItems; ++i) {
    A* pItem;
    ar & *pItem;  ///////////// Run-Time Check Failure #3
    m_vector.push_back(pItem);
}

But when I run the program I get the following error:

Run-Time Check Failure # 3 - The variable 'pItem' is Being Used without Being initialized. 

What am I doing wrong?

Thank you.

4

2 に答える 2

5

が指すオブジェクトにメモリを割り当てる必要がありますpItem

A* pItem = new A;
ar & *pItem;
m_vector.push_back(pItem);

エラーの原因は、ポインタがあったにもかかわらず、ポインタが指すメモリ位置にオブジェクトがなかったためです。ポインタの値はガベージ (初期化されていないポインタ) でした。

deleteメモリ リークを防ぐために、ベクトル内のポインターが指すオブジェクトが不要になったときに呼び出すことを忘れないでください。さらに良いことに、スマート ポインター (例: boost::shared_ptr<>) を使用して、アクセスできなくなったときにメモリの割り当てが解除されるようにします。

于 2012-06-07T16:34:12.443 に答える