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

发布于 2022-09-01 17:44:42 字数 665 浏览 17 评论 0

我在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;
}

clipboard.png
控制台上显示为:
Process returned -1073741819 (0xC0000005) execution time : 1.453 s
使用VC++ 6.0 出现了同样的现象

在百度上也没搜到结果。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

影子是时光的心 2022-09-08 17:44:42
int *i = 0;

这个语句是相当于把int* 的指针变量 i 赋值为0,而不是将int* 的指针 i 指向 0这个常量所在的内存地址,也就是相当于是这样的代码:

int *i;
i=0;

而不是

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

你的理解是不是这样的?@changqngd

无人接听 2022-09-08 17:44:42

刚才运行了几次又想了一下,终于想通了。
错在:
int *i=0; //这里给指针赋了一个空地址
*i = 9;
//*i是空地址指针,不能使用
改为如下就正确了:

int ival=90;
int *i = &ival;
*i=9;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文