奇怪的RVDS错误

时间:2008-11-21 23:39:55

标签: c

我有一个针对某个视频解码器的RVDS项目(它的所有C代码), 为ARM926EJ-S目标创建,使用RVDS 2.2模拟器执行。 我没有使用任何scatterload /<配置文件> /< map file>至 提到代码中的各种内存段,如Stack segment, 堆,数据段,RVDS模拟器环境的代码段。

  • 当我添加或评论一些代码(冗余/死代码),然后编译项目并执行它时,解码器在提到错误条件发生后正常退出,这应该不是这样的,因为评论/添加的代码是冗余的,根本不会影响功能。
  • 现在如果我执行的操作与1中完成的操作相反。)即取消注释在步骤1中注释的代码并编译并执行,解码器完全正常工作直到其逻辑结束。
  • 相同的C源/头文件在MSVC工作区中正常工作。

我试图通过这种行为进行大量调试,但我无法确定原因和解决方法。

  • 我添加/删除代码是否是堆栈损坏的情况?
  • 是否有任何段被覆盖,例如堆栈段溢出到数据段,或者代码段溢出到数据段?

2 个答案:

答案 0 :(得分:0)

我有一些类似的事情发生在我正在进行的项目中。它最终成为引用堆栈上未初始化指针的问题。它通常指向未使用的程序存储器,并覆盖未使用的代码。

当我删除未使用的代码时,突然它指向了我不能修改的内存,并且它会以不合理的方式退出。

仔细检查你的mallocs,并确保你的函数变量指针!

答案 1 :(得分:0)

初始化ZI部分是否为零。我认为运行时中的分散加载代码初始化了ZI部分(我不是一段时间)。我们有一个问题,ZI部分被初始化,我们的程序加载器遗留了一些数据。

因此,更改代码中的任何行都会导致它在同一位置崩溃。 即使删除代码也会导致崩溃。我会在你的程序开始时验证ZI部分为零。

相关问题