size_t test(std::string& dest, const char* str, size_t len)
{
const char* data = str;
while(len--)
{
//省略无关的逻辑
dest.push_back(*data); 执行完这行后, *(data+1)的值被改写了
data++;
}
}
执行完dest.push_back(*data)后, *(data+1)的值被改写了。gdb watch发现是在 std::string::push_back里面被改成‘\0’了。
单进程,单线程程序,必现。
调用方式是:
string dest;
test(dest, str, 5);
这是什么问题呢,怎么理解?
※ 修改:·casbupt 于 May 29 17:10:28 2020 修改本文·[FROM: 114.247.88.*]
※ 来源:·水木社区
http://www.newsmth.net·[FROM: 114.247.88.*]
修改:casbupt FROM 114.247.88.*
FROM 114.247.88.*