【发布时间】:2015-12-14 12:45:28
【问题描述】:
据我了解,这段代码 sn-p 有问题,因为在 to_string 和 port 的值不正确之后,std::string 将被删除。
#include <iostream>
#include <stdio.h>
int main() {
int a = 123;
const char* port = std::to_string(a).c_str();
printf("val = %s", port);
return 0;
}
但是,程序运行良好并打印“123”(使用 g++ 编译器)。 Valgrind 也没有发现问题。
有什么方法可以证明(可能是一些工具或编译器选项)上面的代码确实有问题?
【问题讨论】:
-
工作正常(或至少看似工作正常)不幸的是UB的可能性之一。
-
这就是为什么该转换是明确的并且具有 ugly 名称
c_str()。 -
不幸的是,由于小字符串优化,免费后无法访问。如果您将代码更改为
unsigned long long a = 1234567891343433ull;,您将收到来自valgrind的投诉。
标签: c++ memory type-conversion std valgrind