关于程序中的指针

matt1014 2007-02-01 11:17:18
假设我程序中有一个指针P,它本身不存方什么,但它要多次指向别人,也就是临时性的作一些操作。比如:
char x[100]="aaaaaaaaaa";
char y[100]="bbbbbbbbbb";
char z[100]="cccccccccc";

P=x;
..一些操作;
P=y;
..一些操作;
P=z;
..一些操作

请问,每次当一些操作完成后,有没有必要把P=NULL?
也就是像这样:
P=x;
..一些操作;
p = NULL;
P=y;
..一些操作;
p = NULL;
P=z;
..一些操作
p = NULL;
有无必要?
...全文
549 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
丁天才 2007-02-11
  • 打赏
  • 举报
回复
主函数里面 指针 不会free的啊,无所谓吧。
沉沦 2007-02-10
  • 打赏
  • 举报
回复
.......看你下面是什么程序。。。如果下面的指针(p++)移动了。。。~!~!
就需要NULL/。。。。如果没有。。。可以不要。。
飞驰的青蛙 2007-02-10
  • 打赏
  • 举报
回复
不必这样,但是是个好做法。
htqx 2007-02-10
  • 打赏
  • 举报
回复

楼主的情况, 我觉得有必要.
因为你前面已经处理完当前的对象,就不应该继续指向他,因为已经没有这个语义的需要.

也就是说,那个指针在当时的意义等于一个没有工作的指针. 这种指针应该归位为0.
galactic 2007-02-09
  • 打赏
  • 举报
回复
指针用完了 是先free 再NULL 还是先NULL 再free ???
wendy1116 2007-02-09
  • 打赏
  • 举报
回复
回楼上的:当然是先free再令其指向NULL!
fanic 2007-02-09
  • 打赏
  • 举报
回复
指针都置NULL了,还怎么Free啊?你得告诉free函数应该释放哪一块内存吧?指针就是一块内存的地址啊.
Kevin_Fighting 2007-02-08
  • 打赏
  • 举报
回复
我觉得在搂主所说的情况下,没有必要这样做。
将指针赋值为null的确是个好习惯,但要注意是适时。滥用指针的杜绝并不是能靠机械的规定就可以实现的。就算是这样,也要考虑是否在保证目标的前提下更合理化。
我觉得在两种情况下有必要“立即“将指针赋null:
1.定义指针时,若没有立即初始化为明确的指向,请立即赋值null.
2.释放指针后,立即赋值null.
原因有几点:
1.任何变量都应该初始化,指针也不例外,在不知道其指向的前提下,只能先赋值null。
2.释放指针后,由于释放指针的操作肯定是对于堆里面的对象,而堆里面的对象的生存期是很长的,所以有可能造成后续程序对其滥用的情况。
并且以上两点也不是金科玉律。
而对于一般的情况,譬如楼主的情况,则没有必要。因为指针本身并不代表什么,况且仅仅给指针随便丢一个NULL是不能解决所有问题的。
像下面这种情况:
{
char *p = GetALinkHead();
while (p != NULL)
{
delete p;
p = GetLinkNextNode();
}
p = NULL;
}

{
char *p = GetALinkHead();
while (p != NULL)
{
free(p);
p = NULL; // !!
p = GetLinkNextNode();
p = NULL; // !!!
}
p = NULL;
}
以上两种情况,不能说后者比前者更好吧。
况且有时候会出现这样的情况:
{
char *str = (char *) malloc(100);
str = &anotherObject; // !!! str 指向了其他对象,那上面申请的内存怎么释放?
}
那为了防止这种情况发生,我是不是更应该把程序进一步改成这样:
{
char *p = GetALinkHead();
while (p != NULL)
{
free(p);
p = NULL; // !!
if (p == NULL) // !!!!
{
p = GetLinkNextNode();
}
p = NULL; // !!!
}
p = NULL;
}
都可以看到,这样做是没有必要的。使用NULL只是一个辅助工具,既然是辅助,那就要他真正有所用,该用的时候才用,以免付出一些不值得的代价。
kjeny2002 2007-02-08
  • 打赏
  • 举报
回复
有必要,防止内存泄漏和乱指
很想有颗星 2007-02-07
  • 打赏
  • 举报
回复
ding
tonyde 2007-02-02
  • 打赏
  • 举报
回复
当然要啦!那样显得你比较有水平,是一个相当好的习惯,虽然不那样做也可以,但有时候会出问题的,有可能编译是通不过的.建议你保持这个良好的习惯,这会给你以后的职业生涯创造更好的机会的!
czp_opensource 2007-02-01
  • 打赏
  • 举报
回复
有必要的,你的程序加一起100行代码,就没必要了.如果100000行,那是非常非常有必要的
cutftp 2007-02-01
  • 打赏
  • 举报
回复
没有delete你把p指向NULL干什么
hungerfool 2007-02-01
  • 打赏
  • 举报
回复
尽量不要出现无意义的野指针,这是编成基本素养。如若不这样,你不知道什么人给你来个
if (p != NULL)
{ free(p); }
这类的东西,要知道你的代码不是为了当下没有问题,而是以后你改动,其他人改动都不会出现问题,所以要遵守规范。
mengshijie_1981 2007-02-01
  • 打赏
  • 举报
回复
置空很必要!

P=x;
..一些操作;
p = NULL;
P=y;
..一些操作;
p = NULL;
P=z;
..一些操作
p = NULL;


“p = NULL;”好像是多余的,但并不总是这样,如果P在不使用y或z初始化的前提下,p = NULL就显得很重要了,后面的操作可以通过比较p = = NULL 来验证P是否是可用资源。如果P为空,则说明前面的程序片断不再使用P了,否则,就可以认为P正在被前面的程序片断使用。
iu_81 2007-02-01
  • 打赏
  • 举报
回复
非常有必要
shawnwan 2007-02-01
  • 打赏
  • 举报
回复
语法上无需如此,
实际上好作法

不改为NULL你是个CODER
该了你就不只是CODER,而是好CODER
doubhor 2007-02-01
  • 打赏
  • 举报
回复
自己按照一个同一的习惯来管理指针,如果你这个指针仅仅指向别的地方,从来不会自己分配空间就无所谓了,否则就要在使用后置为NULL,保险起见都置为NULL吧.

TWILIGHT410954839 2007-02-01
  • 打赏
  • 举报
回复
没必要 但是最好这样
在每次用完后最好都应处理临时指针 以免它指向不明地址
hustivan 2007-02-01
  • 打赏
  • 举报
回复
指针free以后再置null是良好的习惯
加载更多回复(3)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧