簡體   English   中英

C指針故障:從函數返回時,它將丟失地址信息

[英]C pointer trouble: it loses address information when returned from a function

我在這里有一些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的處理能力,兩個緩沖區的大小都適合數據。

預先感謝您提供任何線索。

聞起來像您沒有聲明函數原型。 這在intvoid*具有相同寬度的32位計算機上運行了好幾年。 如今,這些已經不一樣了,您會丟失高位字節。

我猜你用-Wall或類似的東西編譯嗎?

這可能是由於多種原因,緩沖區溢出,堆空間有限等原因。發布代碼會有所幫助!

這幾乎肯定是由於內存損壞,即寫入隨機地址或已分配對象或堆棧上對象的末尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM