C++程式崩潰的情況有哪些?

來源:互聯網
上載者:User
/*goal, C++程式崩潰的情況有哪些?面試時被問到這個問題。我現在想到了下面一些情況,並測試了一下。我想應該還有其他情況吧,有興趣的同學可以留言補充。date, 2013-3-10env, ubuntu1204-gccblog, http://blog.csdn.net/shunqiziranhao007/article/details/8635196*/#include <iostream>using std::cout; using std::endl;#include <cstring>#include <vector>using std::vector;class A{public:A() : a(0), b(new int(2)) {}~A() { delete b; }// 由於這個函數沒有使用到類的資料成員,所以使用null 指標時可以訪問該函數void f1(){cout << "f1()" << endl;}void f2() {cout << "f2()" << "a: " << a << ", b: " << *b << endl;}private:int a;// 剛開始測試的時候沒有加指標成員,有些情況沒有崩潰,後來加了,就崩潰了。int *b;};void show(char *str){str[0] = 'x';cout << str << endl;}A* fun(){A a;A *p = &a;return p;}int main(){#if 0// 使用null 指標,但是訪問的函數沒有使用了類的資料成員,所以調用還是成功的。A *p = 0;p->f1();#endif#if 0// 使用null 指標,但是訪問的函數使用了類的資料成員,所以調用失敗A *p = 0;p->f2();#endif#if 0// 使用未初始化的指標,測試沒崩??A *p;p->f2();#endif#if 0// 使用了已經刪除的指標,測試並沒有崩潰??A *p = new A;p->f2();delete p;p->f1();p->f2();#endif#if 0// 多次刪除同一個指標,沒崩潰??我記得會崩潰的啊??A *p1 = new A;p1->f2();delete p1;delete p1;#endif#if 0// 使用數組時越界訪問了,崩潰A* a = new A[2];for (int i = 0; i < 10; i++){a[i].f2();}cout << endl;#endif#if 0// 使用c字串時,沒有注意字串結束符,測試沒有崩潰char a[] = {'1', '2', '2'};cout << strlen(a) << endl;#endif#if 0// 使用迭代器時,迭代器無效。崩潰vector<A> va;vector<A>::iterator it = va.begin();it->f2();#endif#if 0// 使用迭代器時,迭代器無效了。如該迭代器已經被刪除了,已經不是以前那// 個迭代器了。崩潰了。A a;vector<A> va;va.push_back(a);vector<A>::iterator it = va.begin();while (it != va.end()){va.erase(it);++it;}#endif#if 0// 使用迭代器時,迭代器無效了。記憶體調整了,已經不是以前那個迭代器了;A a;vector<A> va;va.push_back(a);vector<A>::iterator it = va.begin();it->f2();va.resize(10);it->f2();#endif#if 0// 迭代器越界訪問,崩潰A a;vector<A> va;va.push_back(a);vector<A>::iterator it = va.begin();it->f2();it = va.end();it->f2();#endif#if 0// 分配記憶體,讓記憶體耗盡,沒測試。A* a = new A[100000000000000];#endif#if 0// 修改了靜態區記憶體的資料,測試崩潰了char *str = "crash";show(str);#endif#if 0// 返回局部變數的引用或者指向局部變數的指標,測試沒有崩潰?A *ra = fun();ra->f2();#endif#if 0// 刪除了非new分配的記憶體,測試崩潰了。int i;int *p = &i;delete p;#endifreturn 0;}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.