gpt4 book ai didi

c++ - 编译器或 boost 库的错误?

转载 作者:可可西里 更新时间:2023-11-01 16:46:33 28 4
gpt4 key购买 nike

这个程序(它是从一个更大的程序缩小的)在windows 7下用vs2008 Release(Win32)模式编译后总是崩溃。我不熟悉汇编代码,不知道这是编译器或boost的错误::ends_with 或 boost::asio::buffers_iterator。它可以在Ubuntu中用g++编译和执行,没有任何问题。

人们说这不太可能是编译器的错误,但在 Debug模式下(或禁用优化)编译时,问题确实消失了。

这个问题困扰我好几个小时了。任何帮助表示赞赏。提前致谢。

#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/algorithm/string.hpp>

typedef boost::asio::buffers_iterator<boost::asio::const_buffers_1> iterator_t;
typedef boost::iterator_range<iterator_t> range_t;
static const std::string LINE_END_MARK = "\r\n";

int main(int argc, char* argv[])
{
boost::asio::streambuf _buf;
std::ostream os(&_buf);
os<<"END\r\n";

iterator_t cursor = boost::asio::buffers_begin(_buf.data());
iterator_t end = boost::asio::buffers_end(_buf.data());

std::ostream_iterator<char> it(std::cout," ");
std::copy(LINE_END_MARK.begin(), LINE_END_MARK.end(), it);

range_t r(cursor, end);
if(!boost::ends_with(r, LINE_END_MARK))
return 0;
return 1;
}

最佳答案

编辑:抱歉,我看错了代码。

您的游标和结束迭代器指向无效内存。您修改了在复制到输出迭代器期间重新分配的底层 streambuf。 asio streambuf 允许您出于性能原因访问原始内存,但需要注意的是您必须担心这样的事情。

调试和释放将改变分配和解除分配的行为方式,这些行为涉及分配 block 的基础大小以及内存如何被隔离、保护、初始化、对齐等。

在复制操作后构建迭代器以解决您的问题。

关于c++ - 编译器或 boost 库的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13154222/

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