• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            cyt

            一晃眼,原來又有好幾個月沒有上來。其間寫了幾個月的javascript,寫了幾個月的JSP,C++的東西都沒有怎么碰過了。

            這幾天要原來項目的C++代碼從32bit的平臺移植到64bit的平臺。由于以前編寫類庫的時候已經十分小心,也早有預謀,所以竟然很順利的全部編譯通過,而且-Wall下面都沒有任何warning。滿心歡喜之下運行了程序。誰知道馬上就是一個Segment faul。沮喪之余用gdb跟蹤了半天都不知道什么地方的問題。加上valgrind,也是一頭霧水,竟然是說標準STL的hash_map的問題……最后在一次跟蹤的時候,無意中檢查一個指針的初始化值,發現不為空,原因應該就在這里。
            翻查代碼的上下文,原來指針是跟一個int放在同一個union當中,而union的初始化只初始化了int,而沒有初始化指針。在64bit機器的gcc下,int是32bit而指針是64bit,所以就導致指針不為空的現象。所以趕緊把代碼中所有union的地方都找出來檢查一遍。幸好union這種東西平時不敢多用,也沒發現其他的異常。程序重新編譯,再運行,沒有Segment fault了。

            然后再運行了一批unit test。發現其中有幾個不能通過,其原因其實也是比較無聊。都是自己不小心之過:
            1、sha1的代碼copy php的,其中一個php_uint32變量竟然自己寫了unigned long,傻瓜致極
            2、有個地方保存各種長度整數到文件,因為偷懶,把函數寫成了模板,大概就是:
            ???template<typename typeInt>
            ??????int write(typeInt n) {
            ?????????writeToFile( &n, sizeof(n));
            ??????}
            ???然后一個不小心,想寫個string的長度的時候就變成了:? write( str.length() );
            ?? str.length()類型是size_t,64bit,與32bit系統的不一樣,當然也就出錯了。
            ?? 其實平時都已經很小心,盡量使用static_cast強制轉換為特定長度類型的變量再輸出的了,偏偏就是漏了一兩個地方。

            posted on 2007-03-29 23:15 cyt 閱讀(1254) 評論(0)  編輯 收藏 引用 所屬分類: Work
             
            国内精品久久久久久久涩爱 | 久久久无码精品午夜| 久久99精品久久久久久动态图| 精品久久久一二三区| 久久综合伊人77777麻豆| 久久国产福利免费| 狠狠色综合久久久久尤物| 国产激情久久久久影院老熟女| 久久久久久a亚洲欧洲aⅴ| 国产精品久久久久天天影视| 精品久久香蕉国产线看观看亚洲 | 无码人妻久久一区二区三区蜜桃| 无码任你躁久久久久久久| 日韩亚洲国产综合久久久| 色婷婷噜噜久久国产精品12p| 亚洲午夜精品久久久久久浪潮 | 99久久国产精品免费一区二区| 久久婷婷五月综合97色直播| 久久精品国产男包| 欧美va久久久噜噜噜久久| 久久精品国产99久久久| 久久九九亚洲精品| 久久久青草青青国产亚洲免观| 亚洲欧洲精品成人久久奇米网| 久久久久久久免费视频| 青青草原精品99久久精品66| 精品国产91久久久久久久| 久久精品人妻一区二区三区| 久久久久久久综合狠狠综合| 久久久精品国产sm调教网站 | 狠狠色丁香久久综合婷婷| 青青热久久综合网伊人| 久久综合九色综合欧美就去吻| 久久免费看黄a级毛片| 久久精品夜夜夜夜夜久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久精品国产清自在天天线| 国产亚洲精品美女久久久| 国产毛片久久久久久国产毛片| 久久久亚洲欧洲日产国码是AV | 9999国产精品欧美久久久久久|