当我检索 boost::tokenizer 的 begin() 迭代器时,我在 msvcp90d.dll 中遇到了一个崩溃,上面写着“ITERATOR LIST CORRUPTED”,这看起来很像我之前使用 _HAS_ITERATOR_DEBUGGING 编译器标志遇到的问题,但是我已验证我的程序是在关闭此标志的情况下编译的。
这是程序:
#include <sstream>
#include <boost/tokenizer.hpp>
#include <boost/algorithm/string.hpp>
int main(int argc, char* argv[])
{
std::string data("gobo;wimbley;red;moki;boober");
std::ostringstream input;
input << data;
std::string mystr(input.str());
boost::char_separator<char> separator(";");
boost::tokenizer<boost::char_separator<char>> tok(mystr, separator);
boost::tokenizer<boost::char_separator<char>>::iterator iter = tok.begin();
}
有趣的是,如果我用以下行替换标记器的实例化,它会起作用:
boost::tokenizer<boost::char_separator<char>> tok(data, separator);
所以它似乎与ostringstream有关。有任何想法吗?