搜尋

首頁  >  問答  >  主體

C++中 指针赋值后 exe程序无法运行

我在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 出现了同样的现象

在百度上也没搜到结果。

怪我咯怪我咯2804 天前741

全部回覆(2)我來回復

  • 大家讲道理

    大家讲道理2017-04-17 12:08:38

    int *i = 0;
    

    這個語句是相當於把int* 的指標變數 i 賦值為0,而不是將int* 的指標 i 指向 0這個常數所在的記憶體位址,也就是相當於這樣的程式碼:

    int *i;
    i=0;
    

    而不是

    int *i;
    *i= 0;    //不过这样的用法也不规范!这句代码的作用是为指针 i所指向的内存赋值,
              //但是因为i 指向未知内存,因为前面只是进行了初始化,所以这时候是一个野指针
              //为野指针指向的内存赋值,显然会导致内存错误!
    

    你的理解是不是這樣的? @changqngd

    回覆
    0
  • 阿神

    阿神2017-04-17 12:08:38

    剛剛運行了幾下又想了一下,終於想通了。
    錯在:
    int *i=0; //这里给指针赋了一个空地址 *i = 9; //*i是空位址指針,不能用
    改為如下就正確了:

    int ival=90;
    int *i = &ival;
    *i=9;
    

    回覆
    0
  • 取消回覆