C++ 指针指向右值导致的野指针

0 引言


 

c++标准规定,函数的返回值会在当前行结束后结束生命周期,所以后面再使用c_str()返回的指针时,string的生命周期已经结束了,指针指向的是野指针。不过在有些编译环境下,这个生命周期的结束会延后。

 

1 问题描述


 

#include <string>
#include <iostream>

auto foo() {
    return std::string{"ff"};
}

int main() {
    const char *op;
    if(auto p = foo().c_str()) {
        std::cout << p << std::endl;
        op = p;
    }
    std::cout << op << std::endl;
}

  

2 reference


 

https://en.cppreference.com/w/cpp/language/copy_elision

 

posted @ 2022-03-07 15:24  十步一杀2017  阅读(95)  评论(0编辑  收藏  举报