#issue address of local may escape 局部变量逃逸

1.问题描述
使用谷歌测试框架,定义一个全局变量,然后用一个main函数中定义并初始化的局部变量给该全局变量赋值,会报警告:

#issue address of local may escape the function。

【#issue address of local may escape 局部变量逃逸】2.问题分析:
将局部变量的地址托管给全局变量,本身就是不安全的。这会造成,被托管的地址的生命周期,比其所指的内容生命周期更长。而这,意味着,所指内容随时可能失效。
当然,在main函数中如此做是安全的,只要将全局变量声明成static静态全局变量即可。
3.问题解决:
用new去声明和定义一个局部变量,而不是用栈。这意味着你自己管理对象的生命周期,自然也就没有警告了。
static ListNode *pHead = nullptr; int main() { /* 而不是 ListNode *listNode_a(0); pHead = &listNode_a; */ pHead = new ListNode(x); }

PS:可以用/ NOLINT /压制Clion警告

    推荐阅读