この質問は前に尋ねられるかもしれませんが、必要なものを正確に見つけることができませんでした。
私の問題は、Web サービスからダウンロードしたデータによってバッファがロードされていることです。バッファは末尾に「\0」がない unsigned char* 形式です。次に、poco xml パーサーに文字列が必要です。
文字列 valgrind に割り当ててみましたが、失われたデータが見つかりました。(下記参照)
コードは次のとおりです。
DOMParser::DOMParser(unsigned char* consatData, int consatDataSize,
unsigned char* lagData, int lagDataSize) {
Poco::XML::DOMParser parser;
std::string consat;
consat.assign((const char*) consatData, consatDataSize);
pDoc = parser.parseString(consat);
ParseConsat();
}
Poco xml パーサーには、const char* とデータのサイズを必要とする ParseMemory がありますが、何らかの理由でセグメンテーション エラーが発生します。
更新: これは valgrind の結果の一部です:
==11880== 12,272 bytes in 1 blocks are possibly lost in loss record 1,126 of 1,143
==11880== at 0x402569A: operator new(unsigned int) (vg_replace_malloc.c:255)
==11880== by 0x4491D05: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc+$
==11880== by 0x4493F6F: std::string::_M_mutate(unsigned int, unsigned int, unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==11880== by 0x4494109: std::string::_M_replace_safe(unsigned int, unsigned int, char const*, unsigned int) (in /usr/lib/libstdc++.$
==11880== by 0x44941AD: std::string::assign(char const*, unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==11880== by 0x804DE03: DOMParser::DOMParser(unsigned char*, int, unsigned char*, int) (DOMParser.cpp:27)