C++ 通过malloc构造字符串时获取死锁

C++ 通过malloc构造字符串时获取死锁,c++,string,malloc,deadlock,C++,String,Malloc,Deadlock,我的程序在构造std字符串对象时出现死锁。以下是pstack生成的调用堆栈信息 Thread 5 (Thread 0x7efffaa02700 (LWP 3012)): #0 0x0000003742af4e6e in __lll_lock_wait_private () from /lib64/libc.so.6 #1 0x0000003742a7bae8 in _L_lock_9164 () from /lib64/libc.so.6 #2 0x0000003742a79482 in

我的程序在构造std字符串对象时出现死锁。以下是pstack生成的调用堆栈信息

Thread 5 (Thread 0x7efffaa02700 (LWP 3012)):
#0  0x0000003742af4e6e in __lll_lock_wait_private () from /lib64/libc.so.6
#1  0x0000003742a7bae8 in _L_lock_9164 () from /lib64/libc.so.6
#2  0x0000003742a79482 in malloc () from /lib64/libc.so.6
#3  0x000000374220cb7b in _dl_map_object_deps () from /lib64/ld-linux-x86-64.so.2
#4  0x0000003742212991 in dl_open_worker () from /lib64/ld-linux-x86-64.so.2
#5  0x000000374220e106 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#6  0x00000037422123ea in _dl_open () from /lib64/ld-linux-x86-64.so.2
#7  0x0000003742b22f80 in do_dlopen () from /lib64/libc.so.6
#8  0x000000374220e106 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#9  0x0000003742b230d7 in __libc_dlopen_mode () from /lib64/libc.so.6
#10 0x0000003742afb675 in init () from /lib64/libc.so.6
#11 0x0000003742e0cac3 in pthread_once () from /lib64/libpthread.so.0
#12 0x0000003742afb774 in backtrace () from /lib64/libc.so.6
#13 0x0000003742a6f7bb in __libc_message () from /lib64/libc.so.6
#14 0x0000003742a750c6 in malloc_printerr () from /lib64/libc.so.6
#15 0x0000003742a78b0c in _int_malloc () from /lib64/libc.so.6
#16 0x0000003742a7948d in malloc () from /lib64/libc.so.6
#17 0x00000037452bd0bd in operator new(unsigned long) () from /usr/lib64/libstdc++.so.6
#18 0x000000374529c3c9 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&) () from /usr/lib64/libstdc++.so.6
#19 0x000000374529cde5 in ?? () from /usr/lib64/libstdc++.so.6
#20 0x000000374529cf33 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) () from /usr/lib64/libstdc++.so.6
#21 0x0000000000404642 in vFormat(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, __va_list_tag*) ()
#22 0x0000000000435803 in Logger::Log(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, ...) ()
#23 0x000000000042712d in StatThread::ThreadMain() ()
#24 0x000000000041e71b in BaseThread::StartThreadCallback(void*) ()
#25 0x0000003742e077f1 in start_thread () from /lib64/libpthread.so.0
#26 0x0000003742ae570d in clone () from /lib64/libc.so.6
common.cpp的第19行是:

string result = pBuffer;
死锁似乎是由malloc引起的,malloc是由string的构造函数调用的。 我如何处理这个问题,谢谢你的帮助

if(vasprintf(&pBuffer,STR(fmt),args)=-1{o_assert(false);return”“;}
Wow,你到底为什么要这样写呢?
string vFormat(string fmt, va_list args) {
char *pBuffer = NULL;
if (vasprintf(&pBuffer, STR(fmt), args) == -1) {
    o_assert(false);
    return "";
}
string result = pBuffer;
free(pBuffer);
return result;
}
string result = pBuffer;