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
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号