C_and_CPP 板


LINE

※ 引述《gppo (香蕉是什麽?)》之铭言: : 自问自答.... : 原因在於result[50][10] : result最多只有到[49][9] : 但是我却做了给result[50][..]值的动作 : 所以因此就覆盖到spec的内容(所以其实被覆盖到的可能不只spec这个变数) : 或许是Dev-C++不严谨或其他原因 : compile时他并没有告诉我out of boundary之类的错误提示 compile time 不可能帮你做这种检查。 一个简单的例子,若你这样写: int array[100]; int i; cin >> i; array[i] = 0; compiler 再怎麽神通广大,也不可能在 compile time 的时候 去侦测到 i 的值是多少。又如你使用回圈的例子: for(i = 0; i < 100; i++){ ... array[i] = ...; } 这种 code 基本上也很难在 compile time 侦测 out of boundary, 因为它不知道你在回圈中做了哪些事,以及这些事是否影响到 i 的值。 run time 去侦测是否 out of boundary 是可行的,但程式效能通常会 大幅降低。 : 不过印象中这类的错误如果是用工作站跑的话 : 应该会出现 "Segmentation fault"的错误讯息 因为你的变数是区域变数,空间配置在 stack 中,而 x86 架构下 stack 是由高位址往低位址成长,所以当你存取了超过范围的元素, 资料会盖掉 stack 底层的资料,这些资料可能是其它的区域变数, 对 OS 来说这些变数也是该 process 的合法记忆体空间,所以并不 会产生 segmentation fault。 但如果你超出的范围更大,那就会盖掉 stack 中一项更重要的资讯, 那就是函式的 return address。当这项资讯被改写成另一个不相关 的值,函式结束时会跳到一个非法的记忆体空间,这时候就会发生 segmentation fault 了。更悲惨的是,如果你写入的资料是来自使 用者的输入,那使用者可能藉这个漏洞执行恶意程式码。这种漏洞 称为 buffer overflow,可以说是最常见的安全漏洞了。 : 虽然这应该是自己要注意的地方 不过不晓得板上有没有Dev-C++的使用者 : 知道如何提升syntax或是memory运用上的警告 错误提示? : 至於为什麽改变宣告顺序就会正常 : 我想也只是运气问题 他可能盖到别的地方去了 许多语言为了避免使用回圈存取阵列元素时不小心超出边界,因此 会设计 foreach 的语法,让 programmer 不需要知道阵列大小即可 走访所有阵列元素。C/C++ 没有 foreach,不过 C++ 的 STL 提供 map 和 transform,把阵列的走访行为抽出以免使用者耍笨。另外 STL 的 vector 提供 at() 这个 member function,会在 run time 进行 boundry check,debug 时可以用它来协助你找到超出范围存 取的地方。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.115.146.9
1F:推 VictorTom:推说明:) 03/11 19:48
2F:推 gppo:感谢^^ 03/11 23:24







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灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP