类:
class TB
{
public:
TB() = default;
~TB() = default;
int Initialize();
private:
std::string socket_name = "";
};
实现:
int TB::Initialize()
{
char *socket_name_buffer = new char[128]{};
snprintf(socket_name_buffer, 128, "External_%03d_%03d", 0, 0);
std::string shell_socket_name = std::string(socket_name_buffer);
// 上面这行在赋值时段错误,但如果直接 std::cout 不会段错误
delete[] socket_name_buffer;
socket_name_buffer = nullptr;
return 0;
}
gdb 输出(可以看见是挂在了 basic_string::assign()):
Thread 2 "transceiver" received signal SIGSEGV, Segmentation fault.
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign (this=<optimized out>,
__str=...) at /usr/src/debug/gcc-runtime/7.3.0-r0/libstdc++-v3/include/bits/basic_string.h:1366
1366 /usr/src/debug/gcc-runtime/7.3.0-r0/libstdc++-v3/include/bits/basic_string.h: No such file or directory.
(gdb) bt
#0 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign (this=<optimized out>,
__str=...) at /usr/src/debug/gcc-runtime/7.3.0-r0/libstdc++-v3/include/bits/basic_string.h:1366
#1 0x0006be94 in TB::Initialize (
this=0x44364 <std::__detail::_Compiler<std::__cxx11::regex_traits<char> >::_M_quantifier()+612>)
at <路径缩写>/transceiver/src/TB.cpp:63
......(后面还有很长的栈,没贴了)
问下这个有可能是啥奇怪的问题……
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.