C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) Win7 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) Dev_CPP 问题(Question): 假如先宣告一阵列为: char a[10]; // a[0]~a[9] 使用 for(int i=0; a[i] ; i++) 如上在 i = 10 时 , a[i] 会存取到 a[10] 之非法记忆体 而 break 掉 但不会发生 runtime error. 但在 使用 if(a[10]) 作为判断时 一样存取到 a[10] 之非法记忆体 此时即会造成 runtime error. 想请问这两者之间的差别 还有第一个for的用法是否有其风险在 谢谢大家 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 120.108.205.21
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1488346376.A.2D8.html
1F:→ Hazukashiine: 我不知道他们之间的差别,但是我只知道他们的共同点 03/01 13:41
2F:→ loveflames: 我可以说这个问题很没营养吗,都知道是非法位址了 03/01 13:42
3F:→ Hazukashiine: 就是你完全不需要知道一个非法的行为讨论的必要性 03/01 13:42
4F:→ loveflames: 还问有没有风险 03/01 13:42
5F:→ loveflames: 第一个没当是运气,刚好有分配这个位址的空间 03/01 13:43
6F:推 kyfish: 使用非法记忆体没当场出错绝对是运气不好 真的别这样用 03/01 13:45
7F:→ loveflames: 除非你是要用debugger直接分析记忆体,研究存取非法 03/01 13:49
8F:→ loveflames: 位址导致的结果,否则不要干这种事 03/01 13:49
9F:推 james732: 你闯进不是你的房间,里面有没有人砍死你不知道XD 03/01 14:11
10F:推 stupid0319: 我想a[10]应该是可以读取的,且不会error 03/01 16:02
11F:→ stupid0319: 写入的话,应该要看写到什麽地方,有机会造成错误 03/01 16:03
12F:推 steve1012: Undefined behavior 无法确定会发生啥事 就不要这样搞 03/01 16:03
13F:→ steve1012: 依赖这种行为没啥意义 03/01 16:03
14F:→ stupid0319: 而原PO的runtime error应该是stack爆掉了 03/01 16:03
15F:→ stupid0319: 跟a[10]存取无关,跟a[10]内容有关 03/01 16:04
16F:推 stupid0319: a[10] == 0, 无限loop, stack爆掉 03/01 16:08
17F:→ stupid0319: 又for(;a[i];);又取存到a[11]以上,一定会碰到false 03/01 16:12
18F:→ stupid0319: 想研究深入的话,多逆向一些游戏或软体就会了 03/01 16:13
19F:推 LPH66: >stupid0319 a[10] 不能用, a+10 倒是可以拿来比对 03/02 00:24
20F:→ LPH66: 然後 &a[10] == &(*(a+10)) == a+10 所以也没问题 03/02 00:24
21F:→ LPH66: 这个是所谓 pointer to one-past-end, 可比对不可存取 03/02 00:25
22F:→ stupid0319: 第一次碰到 pointer to one-past-end, 没想过的东西 03/02 00:59
23F:→ stupid0319: 照理说a[10]一定会有资料,到底程式会怎跑呢XD 03/02 01:03
24F:→ stupid0319: 是a[10]之後回传的都是阵列最後一个值的意思吗? 03/02 01:10
25F:→ loveflames: a[10]等於*(a+10) 03/02 08:22
26F:推 LPH66: 对 a[10] 存取是未定义行为, 但比对指标是否为 a+10 合法 03/02 10:04
27F:→ LPH66: 也就是这是 OK 的: for(char *p = a; p != a+10; p++) {} 03/02 10:05
28F:→ LPH66: 在这样的回圈里面的 p 只会指向 a[0]~a[9] 03/02 10:06
29F:→ LPH66: 所以对其存取通通没事 03/02 10:06
30F:→ LPH66: 然後因为上面那行等式, a+10 可以改写成 &a[10] 也是对的 03/02 10:07
31F:→ LPH66: 也就是 a[10] 这样的型式只在前面有取址时是合法的 03/02 10:08
32F:→ LPH66: 没有取址的话它不是存就是取都是非法的 03/02 10:08
33F:→ stupid0319: 写游戏外挂不就是一堆非法行为集合吗?? 03/02 10:31
34F:→ loveflames: 无聊,你拿钻程式漏洞来跟写程式比.... 03/02 10:35
35F:→ loveflames: 要不要乾脆说拿还没清空的stack frame来用 03/02 10:36
36F:→ MOONRAKER: 看什麽外挂啊 练功程式不需要写到非法行为 -_- 03/02 10:39
37F:推 firejox: 练习开shell阿(′・ω・`) 03/02 11:00
38F:→ firejox: 还有就是写GC会有机会这样做 03/02 11:12







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP