錯誤修正集(持續更新)

來源:互聯網
上載者:User

1.linux下兩種常見的壓縮包壓縮方法:(解包:tar -zxvf  + 包名 需要產生的目錄)

bz2檔案

time tar -jcvf j.tar.bz2 workspace/

340M 56.8%

real 13m20.975s

user 11m13.872s

sys 0m5.985s

gz檔案

time tar -zcvf z.tar.gz workspace/

348M 58.1%

real 2m10.305s

user 0m54.228s

sys 0m7.399s

2.當在一個完整的項目中需要添加一個介面或者一個工具的時候,不一定非要重新定義一個新的類,有的時候這樣做會顯得更加的累贅,可以在某個已定義的類中添加幾個函數就行了,這樣會顯得更加的清楚和整潔。

3.程式中使用到了一個動態連結程式庫:ldd + 程式名:

        libcurl.so.4 => /usr/lib64/libcurl.so.4 (0x00007ff76c8ad000)

這是一個curl的動態庫,支援上傳下載,讀取網頁內容。然後再程式中調用封裝好的某個api時出現協議不支援,即https協議,而通過curl -V發現是支援的:

curl 7.14.0 (x86_64-unknown-linux-gnu) libcurl/7.14.0 OpenSSL/1.0.1e zlib/1.2.3 libidn/1.18Protocols: ftp gopher telnet dict ldap http file https ftps Features: IDN IPv6 Largefile NTLM SSL libz 

然後問題就來了,為什麼會這樣呢?然後就查看了下curl這個程式所連結的庫:ldd curl:

        linux-vdso.so.1 =>  (0x00007fff7dfff000)        libcurl.so.3 => /usr/local/lib/libcurl.so.3 (0x00007f8b77c95000)        libidn.so.11 => /lib64/libidn.so.11 (0x00000036a5000000)        libssl.so.1.0.0 => /usr/local/ssl/lib/libssl.so.1.0.0 (0x00007f8b77a2b000)        libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007f8b7764f000)        libdl.so.2 => /lib64/libdl.so.2 (0x000000369b800000)        libz.so.1 => /data/mysql/lib/mysql/libz.so.1 (0x00007f8b77438000)        libc.so.6 => /lib64/libc.so.6 (0x000000369b400000)        /lib64/ld-linux-x86-64.so.2 (0x000000369b000000)        libpthread.so.0 => /lib64/libpthread.so.0 (0x000000369bc00000)        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x000000369e000000)        libnsl.so.1 => /lib64/libnsl.so.1 (0x000000369f000000)        libm.so.6 => /lib64/libm.so.6 (0x000000369c000000)        libfreebl3.so => /lib64/libfreebl3.so (0x000000369dc00000)

這裡就發現了兩個程式所使用的庫是不一樣的,那麼問題就好解決了,直接將curl使用的庫

/usr/local/lib/libcurl.so.3 

複製到

/usr/lib64/

然後將該目錄下的libcurl.so.4連結到libcurl.so.3,這樣就能使用正確的庫了,然後ldconfig重新整理下緩衝。ok。

4.今天不小心在eclipse中把一個項目給刪除了,慌了,果斷上網百度,得知可以恢複,心情平複了下來。方法如下:

在Eclipse內可以恢複項目內被刪除的檔案,或者類似SVN那樣來具體恢複一個java檔案內 被刪除的內容。
如果項目內的檔案被刪除,恢複步驟:
  選中項目,右鍵;
  選擇Restore from Local history;
  在“Check files to restore from local history:”選擇對應的要恢複的檔案。
需要注意的是,eclipse恢複檔案中應該有個類似緩衝存在,這樣的緩衝可能受時間和空間的限制,因此,如果出現刪除太大太多的檔案,可能就不能恢複了。

這幾天受到了不認真的教訓,希望能夠吃一塹長一智!

5.linux shell中如果執行某個程式需要傳遞參數,當參數中包含括弧時,如:

cp a.text (b).test

直接使用時會報錯:

-bash: syntax error near unexpected token `('

這裡需要對括弧進行轉義,有兩種方式:

1.在括弧兩端加上雙引號:

cp a.test "(b)".test

2.在括弧兩隊加上斜杠:

cp a.test \(b\).test

6.今天程式core dump了,通過調試發現又是無符號整形取負的問題:

當定義一個uint32_t 類型的變數時,需要特別注意取負的問題,當一個uint32_t類型的變數取負時,會將最高位變為1,然後就會直接變成最大值了,因此經常會造成記憶體溢出,詳見:http://www.cnblogs.com/tenghoo/archive/2008/06/01/1211663.html

7.當在一個類中需要使用到static map對象或者static vector對象時,即所有的類對象共用一個stl對象或者自訂類對象,那麼根據C++定義就必須在類實現外對static對象進行初始化,但是這幾種類對象的初始化都是比較麻煩的,因此有一種解決辦法就是,不在類中定義static map對象,而是直接在類體外進行定義,這樣不僅類中可以使用該對象,而且也省去了初始化的麻煩。例:

//a.h#include <iostream>#include <map>using namespace std;class A{    public:        static A *getInstance()        {            static A a;            return &a;        }    private:        A(){}        ~A(){}            public:        void display();};

//a.cpp#include "a.h"static map<int, string>m_testMap;void A::display(){char *str[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};for(int i = 0; i < 7; ++i)m_testMap[i] = str[i];map<int, string>::iterator iter = m_testMap.begin();for( ; iter != m_testMap.end(); ++iter)cout << iter->second << endl;}int main(){        A::getInstance()->display();        return 0;}

輸出結果:

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

註:該類是不可重新進入的,即非安全執行緒的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.