首页 > 解决方案 > 指向 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 函数的指针的生命周期。

标签: c++stringpointersc-str

解决方案


代码具有未定义的行为

在第二个printf()中,cs指针仍然指向已释放的内存。您获得相同输出的事实仅意味着该内存的内容尚未被覆盖。但是访问释放的内存仍然无效。


推荐阅读