【发布时间】:2014-07-23 20:16:57
【问题描述】:
我有一个跨平台控制台应用程序。它的目的是在两个对等方之间传输数据。有时接收到的数据包不完整,因此我们在完整数据包到达时将数据附加到字符串中。但它会在一段时间后在字符串中附加数据时崩溃。这是后面的tarce -
1 libsystem_c.dylib 0x93b77acf pthread_kill + 101
2 libsystem_c.dylib 0x93bae4f8 abort + 168
3 libc++abi.dylib 0x9698180c abort_message + 151
4 libc++abi.dylib 0x9697f275 default_terminate() + 34
5 libc++abi.dylib 0x9697f2b5 safe_handler_caller(void (*)()) + 13
6 libc++abi.dylib 0x9697f31d std::terminate() + 23
7 libc++abi.dylib 0x96980412 __cxa_throw + 110
8 libstdc++.6.dylib 0x90e23d6c std::__throw_length_error(char const*) + 104
9 libstdc++.6.dylib 0x90e4f3a9 std::string::append(char const*, unsigned long) + 175
10 libConnector.dylib 0x13905228 ConnectionSocket::AdjustPartialData(char const*, int)
14 libConnector.dylib 0x1383e0b6 ConnectionChannel::ProcessData(int, void const*, int, char*, int) + 7886
15 libConnector.dylib 0x13861ecb ConnectionManager::BaseThreadImpl() + 1185
16 libConnector.dylib 0x13861a23 ConnectionManager::BaseThread(void*) + 17
17 libsystem_c.dylib 0x93b76557 _pthread_start + 344
18 libsystem_c.dylib 0x93b60cee thread_start + 34
有人可以就这个问题提供任何想法吗?
示例代码:
AdjustPartialData(char* const pData, int dataLen)
{
if (true == packetIncomplete)
{
partialDataBuffer.append(pData, dataLen); // crash occurs in this line
}
}
【问题讨论】:
-
请展示一个小的可重现代码示例。
-
示例代码已添加到编辑后的帖子中。
-
dataLen 可能有一些错误,可能是在从有符号值到无符号值的转换中,尝试打印它(或在 dbugger 中设置观察点:))
-
调试器说了什么?
-
cplusplus.com/reference/string/string/append : 如果生成的字符串长度超过 max_size,则会抛出 length_error 异常。
标签: c++ string macos stdstring