2017-06-29 16 views
-3

誰かが私にこの助けてもらえますか?memcpy構文です。私はconst void * testで、実行時にコードがクラッシュするために解釈できないエラーがあると思います。memcpyコマンド実行時のエラー - 第2引数

struct tHistoryRow 
{ 
    std::vector<unsigned char> blob; 
    … … … 
}; 

tHistoryRow tempHistoryRow; 
unsigned int valueBlobSize = sqlite3_column_bytes(pStmt, SQLITE_HISTORYDB_INDEX_VALUE); 
unsigned ssize = tempHistoryRow.blob.size(); 
tempHistoryRow.blob.resize(ssize + valueBlobSize); 
const void * test = sqlite3_column_blob(pStmt, SQLITE_HISTORYDB_INDEX_VALUE); 
std::memcpy(&tempHistoryRow.blob[ssize - valueBlobSize], test, valueBlobSize); 

上記のコードは参考になります。

おかげrGに

+0

[参考資料](http://en.cppreference.com/w/cpp/string/byte/memcpy)と相談してみませんか? –

+0

実行時のコードクラッシュは、構文はOKですが、メモリ違反がある可能性があることを意味します。 –

+0

'&tempHistoryRow.blob [ssize - valueBlobSize]'は、非常に大きなインデックスに折り返されるマイナスのインデックスです。本当に必要なのは 'std :: vector'の' data'メンバ関数です。 – NathanOliver

答えて

2

論理的な観点から、私はあなたがベクトルオブジェクトにデータを追加することを、想定しているため、インデックスが

std::memcpy(&tempHistoryRow.blob[ssize], test, valueBlobSize); 

でなければなりません。

+0

はい、これは動作します。ありがとう –

関連する問題