我这里有一些 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 中写入超出我们处理能力的内容,两个缓冲区的大小都适合数据。
提前感谢您提供任何线索。
最佳答案
听起来好像您没有声明函数的原型(prototype)。这在 int
和 void*
具有相同宽度的 32 位机器上运行多年。现在这些不同了,你丢失了高位字节。
我想你用 -Wall
或类似的东西编译吧?
关于C指针故障: it loses address information when returned from a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4391324/