2016-07-27 23 views
0

私はprotobufsに非常に新しく、シンプルなシリアライズとデシリアライズを試みています。SerializeToArray protobuf格納していません

int sizeArray  = event0.ByteSize(); 
QByteArray * qbArray = new QByteArray[sizeArray]; 

cout << "byteSizeOfEvent0:  " << sizeArray    << endl;  
cout << "preSTA size:   " << qbArray->size()  << endl; 
cout << "is event0 initialized? " << event0.IsInitialized() << endl; 

event0.SerializeToArray(qbArray, sizeArray); 

cout << "postSTA size: " << qbArray->size() << endl; 

が結果

byteSizeOfEvent0:  48 
preSTA size:   0 
is event0 initialized? 1 
The program has unexpectedly finished. 

SerializeToArrayがクラッシュを引き起こした後qbArrayに呼び出す処理を生成し、私はデータの書き込み失敗に起因すると仮定します。イベントは初期化され、SerializeAsStringとDeBuggingを使用するときに正しく表示されます。

私は同じ方法でserializeToArrayの他の投稿を見てきました。私は間違ったことをしていますか?

助けてください。 ありがとう!

答えて

0

new QByteArray[sizeArray]sizeArrayQByteArrayの配列ではなくsizeArray -byte長いQByteArrayを割り当てます。あなたがQByteArrayを使用したい場合は、これは、これら2つのsize()呼び出しは、両方のqbArraysizeArrayバイトの長さに初期化されているので、同じものを返すために起こっていること、しかし

int sizeArray = event0.ByteSize(); 
QByteArray qbArray(sizeArray, 0); 

cout << "byteSizeOfEvent0:  " << sizeArray    << endl;  
cout << "preSTA size:   " << qbArray.size()   << endl; 
cout << "is event0 initialized? " << event0.IsInitialized() << endl; 

event0.SerializeToArray(qbArray.data(), sizeArray); 

cout << "postSTA size: " << qbArray.size() << endl; 

注意、のようになります。

+0

助けてくれてありがとう! – NeutralA

関連する問題