从 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*
,几乎可以消除创建它们的风险。
据我所知,此代码片段有问题,因为 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*
,几乎可以消除创建它们的风险。