std::string crash的问题

来源:互联网 发布:java 数据交换平台 编辑:程序博客网 时间:2024/05/01 10:39

今天遇到一个 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:85No 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:259No 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:1009No 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 0
原创粉丝点击