C指针故障: it loses address information when returned from a function

标签 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 中写入超出我们处理能力的内容,两个缓冲区的大小都适合数据。

提前感谢您提供任何线索。

最佳答案

听起来好像您没有声明函数的原型(prototype)。这在 intvoid* 具有相同宽度的 32 位机器上运行多年。现在这些不同了,你丢失了高位字节。

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

关于C指针故障: it loses address information when returned from a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4391324/

相关文章:

c++ - C3015 : initialization in OpenMP 'for' statement has improper form

c - 指向 C 中 struct 的函数返回矩阵的指针

c - 在 C 中,指针和数组之间的算术如何工作?

c++ - 指针正在以某种方式失效,这会导致访问冲突

c - 如何解释稍微复杂的指针声明

c - 获取窗口的当前尺寸,无论最小/正常/最大化状态如何

c - 如何用 C 语言创建一个用于简单 XOR 密码的 key 流生成器?

C 对转换指针的相等运算符

c++ - 为什么 printf(inputString) 是一个安全漏洞?

c++ - 没有智能指针怎么处理指针?