<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ##沒有躲過的坑--指針(內存泄露) C++被人罵娘最多的就是指針。 夜深人靜的時候,拿出幾個使用指針容易出現的坑兒。可能我的語言描述有些讓人費勁,盡量用代碼說話。 **通過指向類的NULL指針調用類的成員函數**? 試圖用一個null指針調用類的成員函數,導致崩潰: ~~~ #include <iostream> using namespace std; class A { int value; public: void dumb() const {cout << "dumb()\n";} void set(int x) {cout << "set()\n"; value=x;} int get() const {cout << "get()\n"; return value;} }; int main() { A *pA1 = new A; A *pA2 = NULL; pA1->dumb(); pA1->set(10); pA1->get(); pA2->dumb(); pA2->set(20);//崩潰 pA2->get(); return 0; } ~~~ 為什么會這樣?? 通過非法指針調用函數,就相當于給函數傳遞了一個指向函數的非法指針!? 但是為什么pA2->dumb()會成功呢?? 因為導致崩潰的是訪問了成員變量!! **使用已經釋放的指針** ~~~ struct X { int data; }; int foo() { struct X *pX; pX = (struct X *) malloc(sizeof (struct X)); pX->data = 10; free(pX); ... return pX->data; } ~~~ **使用未初始化的指針**? 如果你這樣寫,編譯器會提示你使用了未初始化的變量p。 ~~~ void fooA() { int *p; *p = 100; } ~~~ 那么如果我釋放一個初始化的指針呢? ~~~ void fooB() { int *p; free(p); } ~~~ 結果是一樣的!! **釋放已經釋放的指針**? 直接看看代碼: ~~~ void fooA() { char *p; p = (char *)malloc(100); cout << "free(p)\n"; free(p); cout << "free(p)\n"; free(p); } ~~~ 這樣的問題也許不會立即使你的程序崩潰,那樣后果更加嚴重!! **沒有調用子類的析構函數**? 之前的博客講過,父類的析構函數最好聲明為虛!! ~~~ ParentClass *pObj = new ChildClass; ... delete pObj; ~~~ 上述代碼會造成崩潰,如果父類的析構函數不聲明為虛,那么不會調用繼承類的析構函數,造成內存泄露。 **內存溢出**? 當我們拷貝字符串的時候,我們常常會用到 memcpy函數。這里特別需要注意的就是字符串結尾的null字符: ~~~ char *p = (char *)malloc(strlen(str)); strcpy(p, str); ~~~ 為了躲過這個坑,只需要把 strlen(str) 改為 strlen(str)+1。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看