免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2109 | 回复: 6
打印 上一主题 下一主题

[C++] 咨询一个关于程序优化的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-25 10:14 |只看该作者 |倒序浏览
我的程序用-O2优化后,执行时出现:
terminate called after throwing an instance of 'std:ut_of_range'
what():  vector::_M_range_check
的错误
可是不用优化执行的很顺利。
各位高人有没有碰到这种问题,我应该如何入手呢?
是语法不严密? 还是什么别的原因?
我的系统是debian etch,编译器是gcc
谢谢。

[ 本帖最后由 3rd0mit 于 2009-11-25 10:16 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-11-25 13:54 |只看该作者
一般来说,是程序本身存在问题。
“不用优化执行的很顺利” 很可能是问题没有造成明显可观察到的错误。

论坛徽章:
0
3 [报告]
发表于 2009-11-25 16:14 |只看该作者

回复 #2 caijimin 的帖子

恩,看来我还得仔细看看

论坛徽章:
0
4 [报告]
发表于 2009-11-25 16:18 |只看该作者
是vector 访问越界了吗?

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
5 [报告]
发表于 2009-11-25 17:05 |只看该作者
我遇到过打开优化没问题、关闭优化出错的函数。

原因是优化前指针可以从任何地址开始,于是对连续两个字符数组,第一个数组写溢出就会覆盖第二个数组的第一个元素;打开优化后,由于地址对齐,两个数组间有了空隙,第一个数组多写一个字符就不会覆盖到第二个数组了。

更根本的原因,是处理第一个数组时,把for循环的<误写成<=了。


其实。。这个函数一直没问题,但俺看代码,觉得边界值处理的不大对,就故意邪恶的关闭优化,迫使问题暴露出来了

论坛徽章:
0
6 [报告]
发表于 2009-11-25 18:55 |只看该作者

回复 #4 agaric 的帖子

我还不知道,一般这样的提示是说越界,但有时候因为头文件改变,引用同一头文件的子程序有的重新编译,有的没有编译,执行起来也会有类似的提示,我不知道还有什么别的原因,现在正在检查

论坛徽章:
0
7 [报告]
发表于 2009-11-25 18:56 |只看该作者

回复 #5 shan_ghost 的帖子

我的是关闭没问题,打开有问题,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP