來一道簡化過的小菜
代碼:
[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處錯誤,殊不知是未分配內存區域造成的後果。