0

这是导致崩溃的行:

if (size <= 0)
        return;
    if (data)
    {
        std::string sData = std::string((char*)data, size);
        buffer += sData;  <-- This is the line causing crash
        processBuffer();
    }
    else
        return;

这是堆栈跟踪:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1282016352 (LWP 27952)]
0x002b48ec in memcpy () from /lib/tls/libc.so.6
(gdb) bt
#0  0x002b48ec in memcpy () from /lib/tls/libc.so.6
#1  0x001fea31 in std::string::_Rep::_M_clone () from /usr/lib/libstdc++.so.6
#2  0x001fef2e in std::string::reserve () from /usr/lib/libstdc++.so.6
#3  0x001ff83d in std::string::append () from /usr/lib/libstdc++.so.6
#4  0x001ff9e2 in std::string::operator+= () from /usr/lib/libstdc++.so.6
#5  0x003fc6c8 in StreamDecoder::StreamDecoderEncoder::addData 
    at src/StreamDecoder.cpp:171 

我已经验证它data不是空的,并且缓冲区是一个声明为该类的私有成员变量的字符串。

我不知道为什么 memcpy 有段错误。这里可能出了什么问题?

4

1 回答 1

0

几个月前我在一个学校项目中遇到了这个问题......如果字符串变得很大,它可能会导致段错误。尝试使用类似的东西ostringstream的东西。

于 2013-07-23T06:53:17.683 回答