如果调试的时候一切正常,运行时出错,一般是什么原因?

csdn5211 2008-03-10 10:51:41
感谢大家关注了我的上一个帖子
http://topic.csdn.net/u/20080309/11/37224545-a636-4bea-9246-c5662ae2dcfd.html
这个帖子已经结了。

问题解决了,被我发现了一个隐藏极深的数组越界,而不是vector本身的问题。

现在的问题是,改正之后在debug时可以正常工作了,但是运行程序的时候还会出原来的错误,这又是为何呢?

...全文
2227 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
baobao2010 2008-04-30
  • 打赏
  • 举报
回复
标记
回头看
csdn5211 2008-03-10
  • 打赏
  • 举报
回复
bounds checker居然测不出错误,郁闷了。
ppzzhhsky 2008-03-10
  • 打赏
  • 举报
回复
指针跑飞了
或者是内存泄露
ryfdizuo 2008-03-10
  • 打赏
  • 举报
回复
函数中有一个未被使用的变量,在 Debug 版中它有可能掩盖一个数组越界,而在 Release 版中,这个变量很可能被优化调,此时数组越界会破坏栈中有用的数据。当然,实际的情况会比这复杂得多。与此有关的错误有:
非法访问,包括数组越界、指针错误等。例如
void fn(void)
{
int i;
i = 1;
int a[4];
{
int j;
j = 1;
}
a[-1] = 1;//当然错误不会这么明显,例如下标是变量
a[4] = 1;
}

j 虽然在数组越界时已出了作用域,但其空间并未收回,因而 i 和 j 就会掩盖越界。而 Release 版由于 i、j 并未其很大作用可能会被优化掉,从而使栈被破坏。

独孤过儿 2008-03-10
  • 打赏
  • 举报
回复
检查指针和内存的部分,运行时错误百分之九十九点九都是这类的...
Supper_Jerry 2008-03-10
  • 打赏
  • 举报
回复
这种问题我也碰到过,
一般说来还是内存泄漏或者越界访问造成的。
csdn5211 2008-03-10
  • 打赏
  • 举报
回复
不是debug和release的问题,区别是我点"Debug->go"就一切正常,我点"Excute"就不行。
csdn5211 2008-03-10
  • 打赏
  • 举报
回复
不是初始化问题。调试和直接运行有什么区别吗,我怎么觉得都一样呢?都是同一个东西啊。
michney 2008-03-10
  • 打赏
  • 举报
回复
还是越界
Supper_Jerry 2008-03-10
  • 打赏
  • 举报
回复
使用工具查看一下吧。purify, bounds checker
abupie 2008-03-10
  • 打赏
  • 举报
回复
是不是忘记更新程序编译?
zengwenfu 2008-03-10
  • 打赏
  • 举报
回复
初始化问题,
moss830704 2008-03-10
  • 打赏
  • 举报
回复
应该是初始化的问题
babyvox1999 2008-03-10
  • 打赏
  • 举报
回复
语法正确,逻辑错误
ouyh12345 2008-03-10
  • 打赏
  • 举报
回复
1、优化选项可能会导致某些代码被忽略或次序不对,关闭优化试试
2、是否变量没初始化就使用了
3、debug和release在栈的恢复上的做法不同,看在发送消息时,是否忘计传参数了
taodm 2008-03-10
  • 打赏
  • 举报
回复
检查是否所有数据都进行过初始化。
z_kris 2008-03-10
  • 打赏
  • 举报
回复
原先的贴没看过
关注 学习
老腊肉泡酒 2008-03-10
  • 打赏
  • 举报
回复
指针跑飞了
或者是内存泄露

这样说话有意思.^^

65,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧