C指针故障:从函数返回时丢失地址信息

时间:2010-12-08 19:15:18

标签: c pointers

我在这里有一些C代码,其中指针被分配并返回到父调用者/父函数。使用GDB,我注意到指针分配很好,但是当我返回它时,它会丢失地址前四个字节的高位。基本上它是这样的:

allocate pointer A
allocate pointer B
Free A
Return B

现在,如果我将其更改为:

allocate pointer B
allocate pointer A
Free A
Return B

事情很好。奇怪的是,这段代码工作了5年以上,现在它给我们一些非常具体的案件带来了麻烦。令我们担心的是地址已经改变,我们无法以任何其他方式检测到这个错误,只有当我们附加gdb并开始环顾四周时,我们才看到了变化。

任何人在这里看到类似的东西或知道为什么会这样?顺便说一句,我们并没有尝试编写超过A或B中可以处理的内容,两个缓冲区都是适合数据的大小。

提前感谢任何线索。

3 个答案:

答案 0 :(得分:3)

闻起来好像你没有声明你的功能原型。多年来,在intvoid*具有相同宽度的32位机器上,这种情况很好。现在这些是不同的,你放弃了高阶字节。

你想用-Wall或类似的东西编译,我想?

答案 1 :(得分:1)

这可能是由于许多原因,缓冲区溢出,堆空间有限等。发布代码会有所帮助!

答案 2 :(得分:0)

这几乎肯定是由于内存损坏,即写入随机地址或超过堆栈中已分配对象或对象的结尾。