std::string crash的问题

今天遇到一个 std::string 字符串crash的问题。

问题代码如下面:

#include <iostream>

int main(void)
{
	std::string str;
	char *str2 = 0x00;

	str = str + "hello" + str2;

	return 0;
}


crash的时候,调用栈如下:

(gdb) bt full
#0  strlen () at ../sysdeps/arm/armv6t2/strlen.S:85
No locals.
#1  0xb6f7735c in length (__s=0x0)
    at /home/charles/code/build_toolchain/build/gcc_final/arm-linux-gnueabi/libstdc++-v3/include/bits/char_traits.h:259
No locals.
#2  std::string::append (this=0xbed69cf4, __s=0x0)
    at /home/charles/code/build_toolchain/build/gcc_final/arm-linux-gnueabi/libstdc++-v3/include/bits/basic_string.h:1009
No locals.
#3  0x00010910 in std::operator+<char, std::char_traits<char>, std::allocator<char> > (__lhs=..., __rhs=0x0)
    at /toolchain/arm-linux-4.8.2/arm-linux-gnueabi/include/c++/4.8.2/bits/basic_string.h:2406
        __str = {static npos = <optimized out>, 
          _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x21014 "hello"}}
#4  0x000107e4 in main () at test200.cpp:8
        str = {static npos = <optimized out>, 
          _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
            _M_p = 0xb6fa3d38 <std::string::_Rep::_S_empty_rep_storage+12> ""}}
---Type <return> to continue, or q <return> to quit---
        str2 = 0x0
可以看出,crash的原因是,函数 length()传入了一个空指针。

这个length函数原型为:

std::size_t std::char_traits<char> lengfth(const char_type *);

这和c的函数 strlen()行为是不一样的;  strlen()可以接收一个空指针,返回的值为0.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值