当前位置: 首页 > backend >正文

【C语言干货】野指针

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、什么是野指针?
  • 二、野指针的三大成因
    • 1.指针未初始化
    • 2.指针越界访问
    • 2.指针指向已释放的内存


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是野指针?

野指针是指向"无效内存区域"的指针。这些指针可能指向:

  • 已经释放的内存

  • 未初始化的随机地址

  • 超出合法范围的地址

使用野指针就像在现实生活中使用一个错误的地址去寄信——你无法预测信会送到哪里,甚至可能造成严重的后果。

二、野指针的三大成因

1.指针未初始化

问题代码

c

复制

下载

#include <stdio.h>int main() {int *p;  // 未初始化的局部指针变量,值是随机的*p = 10; // 向未知内存写入数据,危险!return 0;
}

分析

  • 局部变量未初始化时,其值是随机的(栈上的垃圾值)

  • 这个随机值被当作内存地址使用

  • 对该地址的读写操作可能导致段错误(Segmentation Fault)或悄无声息地破坏其他数据

2.指针越界访问

#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};int *p = arr;for(int i = 0; i <= 5; i++) {  // 故意越界*(p++) = i * 10;}return 0;
}

分析

  • 数组arr只有5个元素,有效索引是0-4

  • 循环访问了arr[5],这已经越界

  • 越界后p指向的内存可能属于其他变量或不可访问区域

  • 可能破坏栈上的其他数据(如返回地址),导致程序异常

3. 指针指向已释放的内存

#include <stdio.h>
#include <stdlib.h>int *create_array(int size) {int *arr = (int *)malloc(size * sizeof(int));for(int i = 0; i < size; i++) {arr[i] = i + 1;}return arr;
}int main() {int *my_array = create_array(5);free(my_array);  // 内存已释放// 错误:使用已释放的内存printf("%d\n", my_array[2]);  return 0;
}

分析

  • free()释放了my_array指向的内存

  • 但my_array的值(地址)并未改变

  • 继续使用这个指针就是访问已释放的内存

  • 可能导致数据混乱、程序崩溃或安全漏洞


http://www.xdnf.cn/news/4166.html

相关文章:

  • 系统级编程(二):通过读取PE文件获取EXE或者DLL的依赖
  • Spring Cloud Stream集成RocketMQ(kafka/rabbitMQ通用)
  • 2025年OpenAI重大架构调整:资本与使命的再平衡
  • 在Star-CCM+中实现UDF并引用场数据和网格数据
  • 配置Jupyter Notebook环境及Token认证(Linux服务器)
  • Elasticsearch知识汇总之ElasticSearch监控方案
  • 关于 js:1. 基础语法与核心概念
  • Java实现堆排序算法
  • 代理式AI(Agentic AI):2025年企业AI转型的催化剂
  • 2、实验室测控系统 - /自动化与控制组件/lab-monitoring-system
  • 一文速览可证数学定理的DeepSeek-Prover系列模型:从Prover V1、Prover V1.5到DeepSeek-Prover V2
  • AI教你学VUE——Gemini版
  • 【Python】常用命令提示符
  • 【心海资源】0U攻击工具|一键模仿地址生成+余额归集+靓号生成系统
  • Waymo公司正在加快其位于亚利桑那州新工厂的无人驾驶出租车(robotaxi)生产进度
  • react-transition-group 在 React 18 及以上版本中的兼容性问题
  • stm32之输出比较OC和输入捕获IC
  • 域名别名(CNAME)解析及域名注册操作步骤
  • 学习海康VisionMaster之间距检测
  • 深度学习系统学习系列【6】之深度学习技巧
  • 36.金属壳体材料的选择与工艺处理对EMC的影响
  • 解决Jenkis安装、配置及账号权限分配时遇到的问题
  • 编译原理期末重点-个人总结——2 文法与语言
  • Gradio全解20——Streaming:流式传输的多媒体应用(6)——RT-DETR模型构建视频流目标检测系统
  • 英伟达语音识别模型论文速读:MOSEL 数据集
  • 滚珠螺杆的精度如何保持?
  • PCI/PCIe Error?设备总线?Bus?
  • 深度学习中学习率调整:提升食物图像分类模型性能的关键实践
  • Python元编程与装饰器:从基础到可视化实践
  • DGI数据治理框架的最佳实践