从 int 到 char* 的看似不正确的转换 - 如何查看问题

Seemingly incorrect conversion from int to char* - how to see an issue

据我所知,此代码片段有问题,因为 std::string 将在 to_string 之后被删除,而 port 应该有一个不正确的值。

#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 也没有发现问题。

有什么方法可以证明(可能是某些工具或编译器选项)上面的代码确实有问题吗?

不,一般来说,您不能 "detect" 未定义的行为。电围栏可能有帮助。

你应该在同行评审中发现这些问题。

通过完全避免 const char*,几乎可以消除创建它们的风险。