1

C++でXMLパーサーを作成しようとしています。私は現在、cygwinとgccを使用してコンパイルし、gdbを使用してデバッグしています。私はこのコードを持っています:

const size_t mDataSize = mData.size();  
...  
size_t ltPos = mData.find_first_of('<', pos);  
if (ltPos==mData.npos) {  
...  

mDataは、クラス内でprivate const std :: string&として宣言され、XMLファイルのコンテンツを保持します。gdbでデバッグした後、次のことがわかりました。

(gdb) print pos  
$12 = 636  
(gdb) print mDataSize  
$13 = 2692  
(gdb) n  
141             size_t ltPos = mData.find_first_of('<', pos);  
(gdb) print ltPos  
$14 = 114  
(gdb) print pos  
$15 = 636  
(gdb) n  
143             if (ltPos==mData.npos)  
(gdb) print ltPos  
$16 = 4294967295  
(gdb) print mData[636]  
$17 = (const char &) @0xb2b2a8: 10 '\n'  
(gdb) print mData[637]  
$18 = (const char &) @0xb2b2a9: 32 ' '  
(gdb) print mData[638]  
$19 = (const char &) @0xb2b2aa: 32 ' '  
(gdb) print mData[639]  
$20 = (const char &) @0xb2b2ab: 60 '<'  

find_first_ofを呼び出した結果639を期待していましたが、4294967295(符号付き32ビットintでは-1であり、std :: string :: nposと一致します)を取得しています。誰かがこの行動を正当化できますか?または、これを回避する方法を教えてください。

4

1 に答える 1

0

では、mDataは参照として宣言されていますか?その場合、実際にはコンテンツを保持していませんが、コンテンツへの参照を保持しています。find_first_ofを呼び出しているときに、mDataが参照しているものはまだ存在していますか?

于 2011-10-09T21:10:30.997 に答える