news 2026/3/10 6:09:43

##野指针

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
##野指针

野指针[概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)]
一、野指针成因
1. 指针未初始化
int main()
{
int* p;
//p没有初始化,就意味着没有明确的指向
//一个局部变量不初始化的化,放的是随机值:0xcccccccc
//
*p = 10;//非法访问内存了,这里的p就是野指针
return 0;
}
2. 指针越界访问
int main()
{
int arr[10] = { 0 };
int* p = arr;//&arr[0]
return 0;
}


int* test()
{
int a = 10;
return &a;
}
int main()
{
int*p = test();
if (p != NULL)
{
printf("%d\n", *p);//
}
return 0;
}

3. 指针指向的空间释放

二、如何规避野指针
1. 指针初始化
2. 小心指针越界
3. 指针指向空间释放即使置NULL
4. 避免返回局部变量的地址
5. 指针使用之前检查有效性

三、指针运算
1.指针+整数
#define N_VALUES 5
float values[N_VALUES];
float *vp;
//指针+-整数;指针的关系运算
for (vp = &values[0]; vp < &values[N_VALUES];)
{
*vp++ = 0;
}
int main()
{
int arr[10] = {0};
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
//数组下标的写法
//for (i = 0; i < sz; i++)
//{
// arr[i] = 1;
//}

int* p = arr;
for (i = 0; i < sz; i++)
{
*p = 1;
p++;
}
return 0;
}


2.指针-指针
int my_strlen(char *s)
{
char *p = s;
while(*p != '\0' )
p++;
return p-s;
}


int main()
{
int arr[10] = { 0 };
printf("%d\n", &arr[9] - &arr[0]);
return 0;
}

PS:指针-指针得到的是指针和指针之间元素的个数
不是所有的指针都能相减
指向同一块空间的2个指针才能相减


(1)
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
//(2)递归的版本

//(3) 指针-指针
int my_strlen(char* str)
{
char* start = str;
while (*str != '\0')
{
str++;
}
return (str - start);
}

int main()
{
int len = my_strlen("abcdef");
printf("%d\n", len);
return 0;
}
```

3. 指针的关系运算
for(vp = &values[N_VALUES]; vp > &values[0];)
{
*--vp = 0;
}
代码简化,这将代码修改如下:
for(vp = &values[N_VALUES-1]; vp >= &values[0];vp--)
{
*vp = 0;
}
实际在绝大部分的编译器上是可以顺利完成任务

标准规定:
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/9 0:23:27

指尖魔法:Happy Island Designer 岛屿创意设计全攻略

指尖魔法&#xff1a;Happy Island Designer 岛屿创意设计全攻略 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)"&#xff0c;是一个在线工具&#xff0c;它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal Crossing)启…

作者头像 李华
网站建设 2026/3/9 6:05:39

Happy Island Designer:打造梦幻岛屿的完整设计指南

在数字创意的广阔天地中&#xff0c;岛屿设计工具为创意表达提供了全新的维度。Happy Island Designer作为一款专业的岛屿规划软件&#xff0c;将复杂的景观设计简化为直观的操作界面&#xff0c;让每位用户都能轻松构建属于自己的虚拟乐园。 【免费下载链接】HappyIslandDesig…

作者头像 李华
网站建设 2026/3/7 12:42:03

GPT-SoVITS语音数据清洗工具推荐

GPT-SoVITS语音数据清洗与少样本克隆技术实践 在AI语音助手、虚拟主播和数字人日益普及的今天&#xff0c;用户不再满足于千篇一律的“机器音”。越来越多的场景开始追求个性化声线——用自己或特定角色的声音朗读任意文本。然而&#xff0c;传统语音合成系统动辄需要数小时高质…

作者头像 李华
网站建设 2026/3/10 4:40:44

终极MathQuill入门指南:5分钟掌握网页数学公式编辑

终极MathQuill入门指南&#xff1a;5分钟掌握网页数学公式编辑 【免费下载链接】mathquill Easily type math in your webapp 项目地址: https://gitcode.com/gh_mirrors/ma/mathquill MathQuill是一个革命性的JavaScript库&#xff0c;专门为网页开发者设计&#xff0c…

作者头像 李华
网站建设 2026/3/7 14:32:23

七段数码管动态显示调试实战案例

从加法器到数码管&#xff1a;一次硬核的动态显示调试实战 你有没有过这样的经历&#xff1f;明明电路连接正确、代码逻辑清晰&#xff0c;可数码管一通电就“鬼影重重”&#xff0c;数字重叠闪烁&#xff0c;像是在演科幻片。或者输入 55 &#xff0c;结果不显示“10”反而亮…

作者头像 李华
网站建设 2026/3/9 7:00:19

GPT-SoVITS背景噪音处理能力测试

GPT-SoVITS背景噪音处理能力测试 在语音合成技术飞速发展的今天&#xff0c;我们早已不再满足于“能说话”的机器。从虚拟主播到有声书朗读&#xff0c;从智能客服到数字人交互&#xff0c;用户期待的是自然、拟真、富有情感的声音表达——而这一切的前提&#xff0c;是模型能…

作者头像 李华