malloc_consolidate中的SIGABRT-__FUNCTION_是否可能返回NULL
SIGABRT in malloc_consolidate - Is it possible that __FUNCTION__ to return NULL?
我使用以下代码登录ARM:
template <typename T>
MyClass& operator<<(T const& t)
{
try
{
m_buffer << t;
}
catch (...)
{
/* No exceptions */
}
return *this;
}
像这样使用:
myClass <<__FUNCTION__<< " some string and int" << 5;
但有一次,我遇到了这样的崩溃(来自数千次测试)。__FUNCTION__
是否可能返回NULL(在这种情况下,函数名称长度为20)?
Program terminated with signal 6, Aborted.
#0 0x3695f46c in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:67
67 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
in ../nptl/sysdeps/unix/sysv/linux/raise.c
(gdb) bt full
#0 0x3695f46c in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:67
pid = <value optimized out>
selftid = 1673
res = <value optimized out>
#1 0x36964d70 in *__GI_abort () at abort.c:92
act = {__sigaction_handler = {sa_handler = 0, sa_sigaction = 0}, sa_mask = {__val = {0 <repeats 32 times>}}, sa_flags = 0, sa_restorer = 0}
sigs = {__val = {32, 0 <repeats 31 times>}}
#2 0x369a3e4c in __malloc_assert (assertion=<value optimized out>, file=0x36a5f560 "malloc.c", line=<value optimized out>, function=<value optimized out>) at malloc.c:352
No locals.
#3 0x369a41c0 in malloc_consolidate (av=0x34781de0) at malloc.c:5345
fb = <value optimized out>
maxfb = 0x36a79288
p = 0x728818
nextp = 0x6ddec8
unsorted_bin = 0x36a7928c
first_unsorted = <value optimized out>
nextchunk = 0x728ac8
size = 688
nextsize = 880297072
prevsize = <value optimized out>
bck = <value optimized out>
fwd = 0xbec
__func__ = "malloc_consolidate"
#4 0x369a70d8 in _int_malloc (av=0x36a7925c, bytes=<value optimized out>) at malloc.c:4573
nb = <value optimized out>
idx = 1673
bin = <value optimized out>
victim = 0x36a78000
size = <value optimized out>
victim_index = <value optimized out>
remainder = <value optimized out>
remainder_size = <value optimized out>
block = <value optimized out>
bit = <value optimized out>
map = <value optimized out>
fwd = <value optimized out>
bck = <value optimized out>
errstr = <value optimized out>
__func__ = "_int_malloc"
#5 0x369a83d4 in _do_malloc (bytes=525) at malloc.c:4011
ar_ptr = 0x36a7925c
victim = <value optimized out>
__func__ = "_do_malloc"
#6 0x369aa0e8 in *__GI___libc_malloc (bytes=525) at malloc.c:3648
mem = <value optimized out>
#7 0x350b1f4c in operator new(unsigned int) () from /lib/libstdc++.so.6
No symbol table info available.
#8 0x3508f0e8 in std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) () from /lib/libstdc++.so.6
No symbol table info available.
#9 0x3508fa4c in std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) () from /lib/libstdc++.so.6
No symbol table info available.
#10 0x350905d0 in std::string::reserve(unsigned int) () from /lib/libstdc++.so.6
No symbol table info available.
#11 0x35089de4 in std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::overflow(int) () from /lib/libstdc++.so.6
No symbol table info available.
#12 0x3508e648 in std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, int) () from /lib/libstdc++.so.6
No symbol table info available.
#13 0x35087604 in std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int) () from /lib/libstdc++.so.6
No symbol table info available.
#14 0x35087958 in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) () from /lib/libstdc++.so.6
No symbol table info available.
#15 0x350e8974 in MyClass::operator<< <char [21]> (this=0x34782200, t=...) at ...
有了勇气,我看不出什么奇怪的东西。
LE:中止期间打印以下消息:malloc.c:5345: malloc_consolidate: Assertion 'p->fd_nextsize->bk_nextsize == p' failed
GCC文档明确指出,__FUNCTION__
为您提供了所处函数的未修饰名称。如果您不在函数中,则此操作唯一失败的方法。
很可能你在其他地方有UB,但现在流行的是,你没有提供MCVE,因此不可能有任何信心帮助你。
相关文章:
- 检查字符串是否"null" C++
- 是否有通用方法可以找到任何以 null 结尾的字符串的长度?
- API 返回智能指针的 std::optional 以明确指定指针可能为 null 是否有意义?
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- &*NULL 在C++中是否定义良好?
- 是否有一种安全的方法可以断言字符串视图是否以 null 终止?
- C++,检查当我无法使用 NULL/0 时是否初始化了变量
- 以 Null 结尾的字符串的"NULL"或" "符号是否存储在文件中?
- 如何检测 ofstream 是否正在写入 /dev/null
- 小写 null 在 C++ 中是否有效
- 一旦 std::weak_ptr 上的锁返回了 nullptr,它是否还会再次成为非 null
- C++如何将结构数组初始化为null,然后在while循环中检查该数组的元素是否为null
- 对 NULL 值的按位操作是否会使C++中的代码崩溃
- 移动语义是否只是一个浅层副本并将其他人的指针设置为 null?
- 测试指针是否为null的最有效方法是什么?
- boost :: asio :: io_service检查是否为null
- 我如何检查该点动态分配的单指针是否为null
- 在此初始值设定项方法上将整个数组设置为 NULL 是否C++标准?
- 将数组(int*)设置为NULL是否释放其占用的内存
- 字符数组中的null是否阻止删除超出该值的内存