我正在尝试用C ++创建XML解析器。我目前正在使用cygwin和gcc来编译和gdb来调试。我有这段代码:
const size_t mDataSize = mData.size();
...
size_t ltPos = mData.find_first_of('<', pos);
if (ltPos==mData.npos) {
...
mData被声明为私有const std :: string&amp;在类中并保存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)。有人可以证明这种行为吗?或者告诉我如何解决这个问题?
答案 0 :(得分:0)
所以mData被声明为引用?如果是这样,它并不真正保留内容,它就拥有对内容的引用。在你调用find_first_of时,mData所指的东西仍然存在吗?