#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警告
推荐阅读
- HTTP高级(Cookie,Session|HTTP高级(Cookie,Session ,LocalStorage )
- 面试官再问你|面试官再问你 ThreadLocal,就这样狠狠 “怼” 回去!
- Netty|Netty 源码之 FastThreadLocal
- python|python 媒体文件播放 脚本
- ThreadLocal源码学习
- 龙马UI|龙马UI lm-ui-elementl lm-address地址组件
- 多线程工具ThreadLocal
- linux如何查看ip地址
- ThreadLocal
- 动手实现一个localcache - 实现篇