【发布时间】:2017-01-08 12:49:13
【问题描述】:
想象一下这样的代码:
string f()
{
string r = "ab";
return r;
}
int main() {
const char *c = f().c_str();
printf("%s.\n", c);
return 0;
}
这段代码可能会崩溃,对吧?因为c 指向的那个字符串被破坏了。但是通过 Valgrind 运行它不会显示任何无效的内存访问。为什么?我知道 Valgrind 无法检查堆栈,但“ab”实际上位于堆上,对吧?
【问题讨论】:
-
小字符串优化。试试
"aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccc" -
“现在我的实际问题如下”是什么意思?请提出一个新问题。