6

我在使用 asio::streambuf 时遇到了问题,希望有人能告诉我我是否错误地使用了该类。当我运行此示例代码时,它会出现段错误。为什么?

更令人困惑的是,此代码适用于 Windows(Visual Studio 2008),但不适用于 Linux(使用 gcc 4.4.1)。

#include <boost/asio.hpp>
using namespace std;

int main()
{
        boost::asio::streambuf Stream;

        // Put 4 bytes into the streambuf...
        int SetValue = 0xaabbccdd;
        Stream.sputn(reinterpret_cast<const char*>(&SetValue), sizeof(SetValue));

        // Consume 3 of the bytes...
        Stream.consume(3);
        cout << Stream.size() << endl; // should output 1

        // Get the last byte...
        char GetValue;
        // --------- The next line segfaults the program ----------
        Stream.sgetn(reinterpret_cast<char*>(&GetValue), sizeof(GetValue));
        cout << Stream.size() << endl; // should output 0

        return 0;
}
4

1 回答 1

1

我使用和看到的 asio::streambuf 通常使用的方式是使用 std::ostream 或 std::istream,例如:

boost::asio::streambuf Stream;
std::ostream os(&Stream);
int SetValue = 0xaabbccdd;
os.write(reinterpret_cast<const char*>(&SetValue), sizeof(SetValue));

我不确定为什么您的代码不起作用,但如果上面的代码确实起作用,那么单步执行它可能会与您的代码有所不同。还有它在哪条线上崩溃?

于 2011-03-07T03:39:29.880 回答