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 に関連するものと思われます。何か案は?