NULL指针能在赋值吗?

[复制链接]
查看11 | 回复3 | 2011-8-27 23:48:20 | 显示全部楼层 |阅读模式
指针在使用前要进行初始化,我将指针初始化为NULL,再对它赋值,为啥不行呢?
#include
void main()
{
        int *a = NULL;
        *a = 3;
        printf("%d",*a);
}
我用malloc动态申请内存后,free掉这段内存,指向这段内存的指针在被赋值为NULL后还能在用吗?再用它指向别的地方,可以吗?

回复

使用道具 举报

千问 | 2011-8-27 23:48:20 | 显示全部楼层
void main(){int *a = NULL;// 定义了a指针变量,指向NULL*a = 3;//问题出在这里,*a指向的是NULL,也就是a没有指向任何变量,你把一个常量3赋值给一个不存在的NULL,是行不通的。printf("%d",*a);}我用malloc动态申请内存后,free掉这段内存,指向这段内存的指针在被赋值为NULL后还能在用吗?再用它指向别的地方,可以吗?Free掉以后最好把指针指向NULL,如果不指向的话,依然指向这块内存区域,如果你不小心,就使用了该指针,修改指针指向的区域,但是这个内存区域和你已经没有任何关系了,你就破坏了其他有用的数据,俗称野指针,你可以百度一下哦。危害很大的。再用...
回复

使用道具 举报

千问 | 2011-8-27 23:48:20 | 显示全部楼层
指针初始化为NULL,还是没有分配内存,所以要报错。指针是个变量。就是个装地址的变量。是变量就可以重复使用。free掉,并且指向NULL,再分配内存(初始化指向别的地方)又可以用了。之所哟free掉了再指向NULL是防止误用了野指针修改随机内存。...
回复

使用道具 举报

千问 | 2011-8-27 23:48:20 | 显示全部楼层
这两个“*“的含义其实是不一样的。定义int *a中“ * "是指针的意思,表示a是一个指针。而*a中" * "的作用是“引用”,即引用地址a的值,但是空地址不可以引用。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行