gpt4 book ai didi

c++ - 从 boost::tokenizer 检索迭代器时 msvcp90d.dll 崩溃

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:41 25 4
gpt4 key购买 nike

当我检索 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 有关。有什么想法吗?

最佳答案

a bug in Visual C++_HAS_ITERATOR_DEBUGGING 被禁用时,使用 std::ostringstream

如果我没记错的话,std::string 复制构造函数复制迭代器。您可以通过使用采用 char*std::string 转换构造函数来解决这个问题。

如果你改变

std::string mystr(input.str());

std::string mystr(input.str().c_str());

那么不会抛出异常。

关于c++ - 从 boost::tokenizer 检索迭代器时 msvcp90d.dll 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1677693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com