我有這樣的一段代碼,編譯和按預期工作:分割錯誤:爲什麼?
#include <iostream>
using namespace std;
int fun(int* p){
*p = 20;
return 1;
}
int main(){
int* number;
*number =10;
cout << "before: "<<*number<<endl;
fun(number);
cout << "after: "<<*number<<endl;
return 1;
}
儘管下面的人給分段錯誤:
#include <iostream>
using namespace std;
int fun(int* p){
*p = 20;
return 1;
}
int main(){
int test=1; //ADDITION
int* number;
*number =10;
cout << "before: "<<*number<<endl;
fun(number);
cout << "after: "<<*number<<endl;
return 1;
}
我使用g++ test.cpp -o test
可有人給我解釋一下編譯這種行爲來自哪裏?
他很幸運?事實上,他非常不幸,因爲一個嚴重的編程錯誤通過。 – Benoit 2011-03-15 17:06:22
或者:'int * number = &test;' – 2011-03-15 17:08:11
我同意Benoit。對於UB這樣的_not_ crash是_unlucky_。 – 2011-03-15 19:32:52