C/C++教程

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

本文主要是介绍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

 

这篇关于C++ 指针指向右值导致的野指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!