支气管炎咳嗽吃什么药| 琮字五行属什么| 黑米和紫米有什么区别| 什么是静电| 小孩肠胃炎吃什么药| torch是什么意思| 什么是标准预防| 软助什么意思| 尖锐湿疣用什么药| 什么叫邪淫| 束脚裤配什么鞋子| 什么样的水果| 春秋大梦是什么意思| 大便发黑是什么情况| 高良姜是什么姜| 1989属什么| 感冒喉咙痛挂什么科| 95年是什么命| 打喷嚏流鼻涕吃什么药| 上火便秘吃什么最快排便| 缺碘会有什么症状| 茉莉茶属于什么茶| 小太阳是什么牌子| 腰扭了挂什么科| 喝冰水牙疼是什么原因| 乳蛾是什么意思| 肾结石是什么| 高我是什么意思| 何以笙箫默是什么意思| 胚芽是什么意思| 蝉又叫什么名字| 脚痒用什么药好| 西字五行属什么| 男士吃什么壮阳最厉害| 小孩出冷汗是什么原因| 降钙素原检测是查什么的| 榴莲什么时间段吃最好| 肾阴阳两虚吃什么| 舌苔发白是什么原因呢| mophie是什么牌子| 皮肤暗黄是什么原因| 解除是什么意思| 咬牙切齿什么意思| 每天坚持跑步有什么好处| 梦见洗车是什么意思| 减肥用什么好| 为什么三文鱼可以生吃| 比五行属什么| 野鸡大学是什么意思| 相生什么意思| 藏青色t恤配什么颜色裤子| 尿酸高中医叫什么病| 擦边球是什么意思| 西夏国是现在什么地方| 芒果有什么好处| 囊肿长什么样子图片| 大便不正常是什么原因造成的| 什么是虚拟币| 为什么身上会长脂肪瘤| vaude是什么品牌| 垂的第三笔是什么| 西红柿什么时候成熟| 吃什么补蛋白最快| 肺阳虚吃什么中成药| 劳热是什么意思| 巽什么意思| 吃什么对神经恢复快速| 尿道口发痒是什么原因| 早晨5点是什么时辰| 职级是什么意思| 7月22号是什么星座| pes是什么材料| 柯南叫什么| 岁月如歌下一句是什么| 腰椎滑脱是什么意思| 紫色加红色是什么颜色| 甲状腺结节有什么症状表现| 窦性心律室性早搏是什么意思| 已加一笔是什么字| 什么叫失眠| 烟酰胺是什么东西| 儿童诺如病毒吃什么药| 西天取经是什么意思| 宝批龙什么意思| 响屁多是什么原因| 艾滋病有什么特征| 倾字五行属什么| 一什么木屋| 细菌感染引起的发烧吃什么药| 颖五行属什么| 夏至是什么时候| 女人补铁有什么好处| 公园里有什么有什么还有什么| 血脂粘稠有什么症状| 巴旦木是什么树的果实| 润滑油是干什么用的| 桦树茸的功效主治什么病| 两小无猜是什么意思| 生意兴隆是什么意思| 什么的梨子| 阴道红肿是什么原因| 类风湿性关节炎用什么药| 李子不能和什么一起吃| 拔智齿后可以吃什么| 查肝胆胰脾肾挂什么科| 什么情况下需要割包皮| 难入睡是什么原因| 口臭是什么原因引起| 犇是什么意思| 尿量少是什么原因| 聪明的人有什么特征| 风平浪静是什么生肖| 明目张胆是什么生肖| 眼睛下面有痣代表什么| 什么是蒙氏教育| 腿有淤青是什么原因| 腰椎退行性变是什么意思| 梦见给死人烧纸钱是什么意思| 山药炖什么好吃| 梦见牛是什么预兆| 脾虚痰湿吃什么中成药| 口腔溃疡买什么药| 怀孕吃什么宝宝皮肤白| 医学是什么| 月的偏旁有什么字| 身上长红点很痒是什么原因| 小孩出汗多是什么原因造成的| 拮抗是什么意思| 伯伯的老婆叫什么| 为什么鼻子无缘无故流鼻血| 便秘是什么原因引起的| 水痘通过什么途径传染| 心绪不宁的意思是什么| 补气血用什么泡水喝| 精索静脉曲张吃什么药| mas是什么意思| 火字旁跟什么有关| 朱顶红什么时候剪叶子| 正月十九是什么日子| 济南有什么特产| 幼猫能吃什么| 人造海蜇丝是什么做的| 骨痂是什么意思| 东盟是什么意思| 破处什么感觉| 抗体高是什么意思| 甲功是查什么的| 唐僧念的紧箍咒是什么| kenzo属于什么档次| 为什么近视| 血常规crp是什么意思| 尿检ph值是什么意思| 怀孕之后身体有什么变化| 蚊子咬了涂什么| 潜质是什么意思| 月经提前量少是什么原因| 肩胛骨缝疼挂什么科| 宫缩是什么感觉| 1950年属虎的是什么命| cl是什么单位| 报告是什么意思| 胆囊切除对身体有什么影响| 蚊子会传播什么疾病| 海豚吃什么食物| 黄金有什么作用| 爸爸的哥哥叫什么| 文雅是什么意思| 什么是五行| 灸石门为什么会不孕| 水溶性是什么意思| 93属什么生肖| 黄精有什么功效和作用| 星期一右眼皮跳是什么预兆| 吃什么治拉肚子| 处级上面是什么级别| hpv52型阳性是什么意思严重吗| 血压高吃什么药比较好| 早上起来口苦是什么原因| 须尽欢什么意思| 低血糖吃什么食物| 梦见别人给我介绍对象是什么意思| hbsab阳性是什么意思| 吃炒黑豆有什么好处和坏处| 为什么夏天热冬天冷| 0.5什么意思| 尿路感染吃什么药好得快| 什么水花| 早早孕什么时候测最准| 阴茎硬度不够吃什么药| 火水是什么| 无语凝噎是什么意思| qn医学上是什么意思| 梦见麒麟是什么兆头| 木耳和什么菜搭配好吃| 肌酐高是什么病| 身上汗味重是什么原因| 八字指的是什么| 荆芥不能和什么一起吃| 南方有什么水果| 背部长痘痘是什么原因造成| 命里缺水取什么名字好| 兆以上的计数单位是什么| 蒸桑拿是什么意思| 肛门坠胀吃什么药| 荷花鱼是什么鱼| 事无巨细是什么意思| 脚气是什么菌感染| 治疗hpv病毒用什么药| 子痫是什么意思| 小心眼是什么意思| 躺尸是什么意思| 幽门螺旋杆菌感染是什么意思| 口渴是什么病的症状| 什么是公共场所| 75年属什么的生肖| 空气炸锅能做什么| 17数字代表什么意思| 小肚子胀是什么原因女性| 颈部ct能检查出什么| 画蛇添足什么意思| 姜汁可乐有什么功效与作用| 梦见被警察抓预示什么| 晚上9点到11点是什么时辰| 巨蟹座男和什么座最配对| 血糖高忌什么食物| 隔应是什么意思| 新股配号数量是什么意思| 什么是痔疮早期图片| 金乌是什么| 斩金念什么| 赛能是什么药| 6.29什么星座| 重建是什么意思| 小孩肚子痛挂什么科| 尿多是什么回事| 过氧化氢是什么意思| 排卵期在什么时候| 什么是出马| 梦见大老鼠是什么意思| 宁夏古代叫什么| 痛经吃什么| 检查乙肝挂什么科| 新生儿嘴唇发紫是什么原因| 腰间盘突出用什么药| 高处不胜寒是什么意思| 皮肤变白是什么原因| 哦耶是什么意思| 酒店五行属什么| 明矾是什么| 向日葵什么时候成熟| 办健康证要带什么| 48年属什么| 半夜三更是什么生肖| 甘油三酯指什么| 纯钛对人体有什么好处| 尿素高吃什么药| 4月1日是什么星座| 在水一方是什么意思| 腔梗是什么病| energy是什么牌子| 杨公忌日是什么意思| 泡脚不出汗是什么原因| 4月29号是什么星座| ad滴剂什么牌子好| 百度
打印
[其他]

40岁“红孩儿”近照曝光 回忆导演杨洁拍戏敬业

[复制链接]
2566|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
OKAKAKO|  楼主 | 2024-6-18 08:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 OKAKAKO 于 2024-6-18 08:43 编辑

野指针,顾名思义,是指那些未被初始化或已经被释放但仍然被引用的指针。

1.野指针的成因
a.指针未初始化:在声明指针变量后,未对其进行初始化,导致指针指向未知的内存地址。

例如:

1#include <stdio.h>  
2
3int main(int argc, char *argv[]) {  
4    // 指针未初始化  
5    int *ptr;
6    // 试图在未初始化的指针上写入值,这是未定义行为  
7    *ptr = 10;
8    printf("Value: %d\n", *ptr);  
9    return 0;  
10}

在上述代码中,ptr 是一个指向 int 类型的指针,但它没有被初始化。紧接着的代码试图通过该指针向内存写入值 10,这是一个严重的错误,因为 ptr 可能指向任何随机的内存位置,导致不可预测的行为。

b.指针越界访问:访问数组或其他数据结构时,指针超出有效范围,指向非法内存。

例如:

 1#include <stdio.h>  
2
3int main(int argc, char *argv[]) {  
4    int arr[5] = {1, 2, 3, 4, 5};  
5    // 指针指向数组的首元素
6    int *ptr = arr;
7
8   // 注意这里的循环条件是 i <= 5,会导致越界  
9    for (int i = 0; i <= 5; i++) {  
10        printf("%d ", *(ptr + i));  
11    }  
12
13    return 0;  
14}

在这个例子中,ptr 是一个指向数组 arr 首元素的指针。在循环中,我们试图访问从 arr[0] 到 arr[5] 的元素,但数组 arr 的有效索引范围是从0 到 4。因此,当 i 等于 5 时,*(ptr + i) 访问的是数组界限之外的内存,这同样是未定义行为。

c.错误地释放指针:误将指针设置为NULL,但之后仍然试图访问该指针,导致程序崩溃。

例如:

 1#include <stdio.h>  
2#include <stdlib.h>  
3
4int main(int argc, char *argv[]) {  
5    int *ptr = (int *)malloc(sizeof(int)); // 分配内存  
6    if (ptr == NULL) {  
7        printf("Memory allocation failed.\n");  
8        return 1;  
9    }  
10
11    *ptr = 10;  
12    // 正确释放内存  
13    free(ptr);
14
15    // 错误:在释放内存后继续使用指针  
16    // 此时ptr是一个野指针,因为指向的内存已经被释放  
17    *ptr = 20;
18  // 未定义行为,可能会导致程序崩溃  
19    printf("Value: %d\n", *ptr);
20    return 0;  
21}

在这个例子中,我们首先使用 malloc 分配了一块内存,并通过指针 ptr 访问它。之后,我们正确地使用 free 释放了这块内存。然而,紧接着我们又试图通过同一个指针 ptr 向已经释放的内存写入值 20,这是不允许的。此时,ptr 变成了一个野指针,因为它指向的内存已经不属于程序了。尝试访问或修改这块内存是未定义行为。

请注意,以上示例代码中的行为都是未定义的,可能会导致程序崩溃、数据损坏或其他不可预测的后果。在实际编程中,应该始终避免这类错误。

相关帖子

沙发
OKAKAKO|  楼主 | 2024-6-18 08:43 | 只看该作者
2.野指针的防范策略
a.初始化指针:在声明指针变量时,应将其初始化为NULL或有效的内存地址。

例如:

 1#include <stdio.h>  
2#include <stdlib.h>  
3
4int main(int argc, char *argv[]) {   
5    // 初始化指针为NULL  
6    int *ptr = NULL;
7
8    // 检查指针是否为NULL,再进行内存分配  
9    if (ptr == NULL) {  
10        ptr = (int *)malloc(sizeof(int));  
11        if (ptr == NULL) {  
12            printf("Memory allocation failed.\n");  
13            return 1;  
14        }  
15    }  
16
17    *ptr = 10;  
18    printf("Value: %d\n", *ptr);  
19
20    // 使用完内存后,释放它  
21    free(ptr);
22    // 将指针重置为NULL,避免成为悬挂指针  
23    ptr = NULL; // 将指针重置为NULL,避免成为悬挂指针  
24
25    return 0;  
26}

b.检查指针边界:在访问数组或其他数据结构时,确保指针在有效范围内。

例如:

 1#include <stdio.h>  
2
3int main(int argc, char *argv[]) {  
4    int arr[5] = {1, 2, 3, 4, 5};  
5    int *ptr = arr;  
6    int index;  
7  // 确保索引在数组范围内  
8    for (index = 0; index < 5; index++) {
9        printf("%d ", *(ptr + index));  
10    }  
11
12    // 如果需要动态地确定数组的大小,请务必确保不要越界  
13    int size = sizeof(arr) / sizeof(arr[0]);  
14    for (index = 0; index < size; index++) {  
15        printf("%d ", arr[index]);  
16    }  
17
18    return 0;  
19}

c.避免误操作:不要随意修改指针的值,特别是在不知道指针指向的具体内容时。

例如:

 1#include <stdio.h>  
2
3void modifyPointerSafely(int **pptr, int newValue) {
4    // 只有在确认pptr和*pptr都有效时才修改指针指向的值
5    if (pptr != NULL && *pptr != NULL) {   
6        **pptr = newValue;
7    }  
8}  
9
10int main(int argc, char *argv[]) {  
11    int *ptr = (int *)malloc(sizeof(int));  
12    if (ptr == NULL) {  
13        printf("Memory allocation failed.\n");  
14        return 1;  
15    }  
16
17    *ptr = 10;  
18    printf("Original value: %d\n", *ptr);  
19
20    // 安全地修改指针指向的值  
21    modifyPointerSafely(&ptr, 20);
22    printf("Modified value: %d\n", *ptr);  
23
24    free(ptr);  
25    ptr = NULL;  
26
27    return 0;  
28}

在这个例子中,我们定义了一个函数modifyPointerSafely,它接受一个指向指针的指针和一个新值。这个函数在修改指针指向的值之前,首先检查传入的指针和它所指向的指针是否都不为NULL。这样可以确保我们不会意外地修改一个无效的指针。

请注意,虽然这些示例展示了如何防范野指针的常见策略,但在实际编程中,还需要结合代码审查、动态分析工具和其他安全措施来确保程序的健壮性。

板凳
LOVEEVER| | 2024-7-15 14:52 | 只看该作者
任何时候一定要初始化参数
地板
szt1993| | 2024-7-17 19:04 | 只看该作者
野指针,是指那些未被初始化或已经被释放但仍然被引用的指针,一定要非常重要
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

257

主题

1972

帖子

4

粉丝
怀孕了有什么症状 宿便是什么颜色 美妞是什么意思 硬核是什么意思 总是干咳是什么原因
经常肚子疼拉肚子是什么原因 脑血栓不能吃什么水果 月经期间应该吃什么食物比较好 凌空什么 肾结石去医院挂什么科
美帝什么意思 写意是什么意思 三天不打上房揭瓦的下一句是什么 积食吃什么食物帮助消化 剪刀手什么意思
间接胆红素高是什么原因 什么是射线 什么是大小周 憋气2分钟算什么水平 juicy什么意思
胆囊毛糙是什么意思hcv8jop4ns3r.cn 百合的花语是什么clwhiglsz.com 前列腺钙化有什么症状hcv9jop1ns9r.cn 长期咳白痰是什么原因hcv9jop6ns9r.cn 宫腔镜手术是什么手术hcv8jop6ns5r.cn
梦见好多死鱼是什么意思hcv8jop8ns4r.cn ig是什么520myf.com 2月24日是什么星座hcv7jop4ns5r.cn 抢七是什么意思hcv8jop6ns2r.cn 阴间是什么意思hcv8jop5ns4r.cn
一什么鼻子hcv8jop5ns3r.cn 3点是什么时辰hcv7jop9ns3r.cn 今年二十岁属什么生肖hcv9jop5ns8r.cn 提拉米苏是什么hcv7jop9ns7r.cn 更年期什么时候开始hcv8jop8ns7r.cn
正在值机是什么意思travellingsim.com 心梗是什么原因造成的hcv8jop3ns5r.cn 秦始皇为什么焚书坑儒hcv8jop9ns7r.cn 资生堂属于什么档次hcv8jop1ns1r.cn MD是什么hcv8jop8ns2r.cn
百度