程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 花非花--記vs2010 c++調試問題

花非花--記vs2010 c++調試問題

編輯:C++入門知識

來一道簡化過的小菜
代碼:

[cpp] 
#include <iostream>  
 
using namespace std; 
 
class test 

public: 
    void f() 
    { 
        cout << "111" << endl; 
    } 
}; 
 
 
int main() 

    test *p = (test *)0x123; 
    p->f(); 

#include <iostream>

using namespace std;

class test
{
public:
 void f()
 {
  cout << "111" << endl;
 }
};


int main()
{
 test *p = (test *)0x123;
 p->f();
}


環境:

vs2010 + c++

 


結果:
終端顯示:111


說明:
實驗很簡單,但是,可能你會覺得不過如此嘛,在編譯的時候編譯器根據成員函數名來確定函數入口點,而不是真的需要一個對象。

 


再來一個麻辣系
代碼:

[cpp]
#include <iostream>  
#include <vector>         // new  
using namespace std; 
 
class test 

public: 
    void f() 
    { 
        //cout << "111" << endl;// new  
        datas_.push_back(1);//new  
 
    } 
 
private: 
    vector<int>       datas_;// new  
}; 
 
 
int main() 

    test *p = (test *)0x123; 
    p->f(); 

#include <iostream>
#include <vector>   // new
using namespace std;

class test
{
public:
 void f()
 {
  //cout << "111" << endl;// new
  datas_.push_back(1);//new

 }

private:
 vector<int>  datas_;// new
};


int main()
{
 test *p = (test *)0x123;
 p->f();
}


環境:

一致

 


結果:
崩啦

 


總結:
自認為是STL的vector處錯誤,殊不知是未分配內存區域造成的後果。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved