野指针产生原因及解决办法

简介: 野指针产生原因及解决办法

情况一


原因

指针变量声明时没有被初始化。


解决办法

指针声明时初始化,可以是具体的地址值,也可让它指向NULL。


情况二


原因

指针 p 被 free 或者 delete 之后,没有置为 NULL。


解决办法

指针指向的内存空间被释放后指针应该指向NULL。


情况三


原因

指针操作超越了变量的作用范围。


解决办法

在变量的作用域结束前释放掉变量的地址空间并且让指针指向NULL。


注意


“野指针”的解决方法也是编程规范的基本原则,平时使用指针时一定要避免产生“野指针”,在使用指针前一定要检验指针的合法性。

目录
相关文章
|
存储 Cloud Native Linux
C++ 如何避免野指针
C++ 如何避免野指针
|
3月前
|
编译器 C语言
如何检查野指针?
野指针是指未初始化或已释放的指针,检查方法包括:1. 初始化所有指针;2. 使用智能指针;3. 释放后将指针置为 nullptr;4. 利用静态和动态分析工具检测。这些措施可有效避免野指针引发的错误。
|
3月前
|
C语言
C语言:哪些情况下会出现野指针
C语言中,野指针是指指向未知地址的指针,通常由以下情况产生:1) 指针被声明但未初始化;2) 指针指向的内存已被释放或重新分配;3) 指针指向局部变量,而该变量已超出作用域。使用野指针可能导致程序崩溃或不可预测的行为。
|
8月前
|
存储 监控 Java
内存泄漏及其解决方法
内存泄漏及其解决方法
112 0
|
5月前
【BUG记录】力扣报错:内存空间不足
【BUG记录】力扣报错:内存空间不足
|
8月前
|
存储 C++
|
8月前
|
编译器
常见的动态内存错误总结(二)
本文总结了两种常见的动态内存错误:内存泄漏和野指针。在示例代码中,内存泄漏发生于动态分配内存后未进行释放,导致程序结束时内存无法回收。野指针问题出现在函数返回栈上创建的变量地址,由于栈空间销毁,指针变成无效,访问时会导致错误。文章强调了使用`static`修饰局部变量可以延长其生命周期以避免野指针,以及释放内存后应将指针置`NULL`以防止后续误用。
53 3
|
8月前
|
存储 安全 编译器
常见的动态内存错误总结(一)
该文讨论了C语言中与动态内存和指针相关的常见问题。首先,强调了对NULL指针解引用的危险性,示例展示了未检查动态内存分配结果导致的问题,并指出`free()`函数传入NULL是安全的。接着,通过代码解释了指针传值调用时的陷阱,说明了为何直接调用`GetMemory(str)`无法改变`Test`函数中`str`的值。文章还提到了动态内存的越界访问和非法释放,包括释放非动态内存、只释放内存的一部分以及重复释放同一块内存的错误情况。最后,建议在释放内存后将指针设为NULL以防止后续误用。
84 1
|
7月前
|
存储 编译器 数据处理
栈溢出及解决方法
栈溢出及解决方法
|
8月前
|
C++
C++野指针 空指针 危险指针
C++野指针 空指针 危险指针
124 3