【发布时间】:2013-07-23 06:45:39
【问题描述】:
这是导致崩溃的行:
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 有段错误。这里可能出了什么问题?
【问题讨论】:
-
试试 valgrind,也许你不小心覆盖了
buffer的内部结构。 -
@JoachimPileborg 这是一个字符串。
-
@arne 是的,这可能是个问题。我会仔细看看的。谢谢。
-
您确定
StreamDecoderEncoder对象是有效对象吗? IE。您没有使用空指针或指向无效对象的指针/引用(例如,指向另一个函数中的局部变量的指针/引用)? -
@JoachimPileborg 我使用了正确的指针。但我认为
buffer中有垃圾。我使用了 clear() 函数,这似乎已经解决了这个问题。
标签: c++ debugging gcc segmentation-fault memcpy