我在Win8中 使用codeblock编写了一段程序。使用的是GCC 4.7 & 4.8 编译器:
#include <iostream>
using namespace std;
int main()
{
int *i=0;
cout<< "Hello world!" << endl;
return 0;
}
程序可以运行,输出:Hello world。很奇怪的是一旦加入指针赋值语句,编译组建通过,但无法运行。
int main()
{
int *i=0;
*i = 9;
cout<< "Hello world!" << endl;
return 0;
}
控制台上显示为:
Process returned -1073741819 (0xC0000005) execution time : 1.453 s
使用VC++ 6.0 出现了同样的现象
在百度上也没搜到结果。
這個語句是相當於把
int*
的指標變數 i 賦值為0,而不是將int*
的指標 i 指向 0這個常數所在的記憶體位址,也就是相當於這樣的程式碼:而不是
你的理解是不是這樣的? @changqngd
剛剛運行了幾下又想了一下,終於想通了。
錯在:
int *i=0; //这里给指针赋了一个空地址 *i = 9;
//*i是空位址指針,不能用改為如下就正確了: