c++ - 指向 std::string 中 c_str 函数的指针的生命周期
问题描述
首先列出的代码如下。
#include<string>
#include<stdio.h>
int main(){
const char *cs;
{
std::string s("123456");
cs = s.c_str();
printf("cs = %s\n",cs);
}
printf("cs = %s\n",cs);
return 0;
}
运行它,结果如下。(Linux gcc)
cs = 123456
cs = 123456
所以,我不知道为什么在s 被销毁后cs指针是有效的。换句话说,指向 std::string 中 c_str 函数的指针的生命周期。
解决方案
代码具有未定义的行为。
在第二个printf()
中,cs
指针仍然指向已释放的内存。您获得相同输出的事实仅意味着该内存的内容尚未被覆盖。但是访问释放的内存仍然无效。
推荐阅读
- jmeter - JMeter 异常:org.apache.http.MalformedChunkCodingException
- java - spring boot service auth 不工作 prop config 但使用 java config
- spring-boot - 我如何在@PostFilter 中调用我的自定义类的方法
- mysql - 尝试启动 MySQL 时出错
- java - 为什么即使提供了参数,spring bean 也会运行默认构造函数?
- javascript - Google 跟踪代码管理器问题类名以“-ok”结尾
- java - Java SWT 文件保存
- mustache - AMP:如何在 AMP 中处理复杂的条件逻辑?
- oracle - 根据记录生成唯一编号
- sql-server - SQL Server 存储过程自我分析执行时间?