<li id="q4aaq"><object id="q4aaq"></object></li>
<xmp id="q4aaq">
  • <button id="q4aaq"><li id="q4aaq"></li></button>
  • <optgroup id="q4aaq"><sup id="q4aaq"></sup></optgroup><center id="q4aaq"><acronym id="q4aaq"></acronym></center>
  • <strong id="q4aaq"></strong>
  • <nav id="q4aaq"><menu id="q4aaq"></menu></nav>
    | |
        最近程序遇到一個小概率出core的bug,高壓力下大概10分鐘左右就會出core,gdb查看發現一個指針高四字節被置0xffffffff了,低四字節正常。
        該指針是局部變量,存放在棧上,排除了線程間同步互斥寫壞數據的可能。
        該指針前后變量均正常,都是指針,排除了寫越界的可能。

        通過日志查看,在返回該指針的函數返回前,指針正常,返回后高四字節即被置0xffffffff了。推斷應該是函數返回的過程中遭到了破壞。

        但不知道為什么返回的過程中會出錯,請教了下組內高工,高人就是高人,一聽問題描述就表示應該是函數聲明的問題。

        原來,在調用另一個so文件中的函數時,如果沒有該函數的聲明,由于從該so的符號表里可以找到函數,所以編譯可以通過,但gcc會把這個函數返回值按默認的int處理,這種情況下,32位機編譯的程序是沒問題的,但64位機上指針是8字節,導致高四字節數據丟失。但返回的指針超過int值域時,高四字節數據丟失,導致指針被破壞。

       所以函數聲明還是不可或缺的。
    by snooda | 分類: c程序設計 | 評論(1) | 引用(0) | 閱讀(2215)
    wizardzwd
    2012/01/15 14:48
    達哥在哪個組?
    snooda 回復于 2012/01/16 23:35
    山口組
    分頁: 1/1 第一頁 1 最后頁
    發表評論
    表情
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    打開HTML
    打開UBB
    打開表情
    隱藏
    記住我
    昵稱   密碼   游客無需密碼
    網址   電郵   [注冊]
                   

     
    色琪琪av男人的天堂-琪琪see色原网色原网站-天天谢天天谢天天要-欧美成人视频