定义一个指针,但是不赋初始值,会有什么危害么?

faintLinkinPark 2006-04-02 02:39:05

开发一个项目,用到了很多别人的接口函数,在很多接口函数中,都会对传进来的指针进行是否为空的判断

比如
int A(char *a,char *b )
{
if(NULL==b)return;
.......
}

然后,我要在程序中调用A函数,
此前有定义,char *a,*b;
比如A(a,b)

那么可以正常的调用


想问:
(1)一般来说,指针变量需要赋初始值么?
(2)遇到行如A函数这样的,需要对传进来的指针进行非空判断的函数,应该怎么定义该指针的初值? (或者说干脆,就像我写的那样,不定义么?)
...全文
3293 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lqlong19922008 2010-05-27
  • 打赏
  • 举报
回复
还是初始化为好,养成一个良好的编码习惯,习惯是很重要的
williamzhang_zz 2006-04-03
  • 打赏
  • 举报
回复
(1)一般来说,指针变量需要赋初始值么?
你在PC机上,指针不赋初值和赋NULL似乎没有区别。但实际上还是有一些区别的,相对不赋初值来说,不同的系统可能有不同的解释,那么你代码的可移植性和安全性都下降了。可能会发生一些非常难调试的bug。 所以一般来说赋初值是个良好的编码习惯。

(2)遇到行如A函数这样的,需要对传进来的指针进行非空判断的函数,应该怎么定义该指针的初值? (或者说干脆,就像我写的那样,不定义么?)
至于函数内是否需要判断传入的指针为空,这点需要看你的设计。
如果你的设计认为传入的指针都必须不为空,也就是说,保证传入指针有效的工作应该在上层代码中完成,那么你可以不做任何指针的有效性判断;如果你认为需要保证安全,那么做一次判断也是可以的,这个没有一定的规则,不过实际情况中加判断的较多。

更多的是这样,用ASSERT宏来判定。如:
int A(char *a,char *b )
{
ASSERT(a);
ASSERT(b);
.......
}

ASSERT的宏在debug和release下定义不同,那么一切就显得比较让人满意
wangmuqq88 2006-04-03
  • 打赏
  • 举报
回复
欢迎大家加群(C/C++)20641933欢迎大家共同学习交流
LoveCreatesBeauty 2006-04-03
  • 打赏
  • 举报
回复
--- quoting ---
开发一个项目,用到了很多别人的接口函数,在很多接口函数中,都会对传进来的指针进行是否为空的判断

比如
int A(char *a,char *b )
{
if(NULL==b)return;
--- quoting ends ---


这只是一个习惯性的用法,而不是语言所要求的。在使用指针引用的内存区域之前,需要保证所指向的内存是有效的。一般而言不能在地址0处分配有效内存。函数中的这种判断势必要求,指针在没有成功分配到内存的时候始终是一个NULL值。否则这样的判断失效。

一个例子,在使用malloc分配内存失败后,返回一个NULL指针。这样并不要求你一定初始化或以类似操作将指针置空。
yingpf 2006-04-03
  • 打赏
  • 举报
回复
你不知道A()干嘛的,你就用它吗?最好在调用A()的前面 char *p = NULL;
caiyujie87 2006-04-02
  • 打赏
  • 举报
回复
mark
chengzanmiao 2006-04-02
  • 打赏
  • 举报
回复
指针可以不赋值,但需明确指向!对程序的稳定性和健壮性是个挑战!
javetu 2006-04-02
  • 打赏
  • 举报
回复
指针可以不赋值的,但是那样指针就随意指向,对后面的程序运行是有影响的
dongpy 2006-04-02
  • 打赏
  • 举报
回复
(1)一般来说,指针变量需要赋初始值么?
=======================
这个看情况了。只要保证在使用指针前,有正确的指向。保险起见,可以初始化为NULL。

(2)遇到行如A函数这样的,需要对传进来的指针进行非空判断的函数,应该怎么定义该指针的初值? (或者说干脆,就像我写的那样,不定义么?)
========================
char *a,*b;
调用A(a,b)前,a、b必须被赋值,否则就是野指针。
yinqing_yx 2006-04-02
  • 打赏
  • 举报
回复
(1)一般来说,指针变量需要赋初始值么?
如:char *p = new char;
.....
delete p;
p = 0;//将指针指空
还是在开始就初始化确定其指向,要不然忘记了直接使用,会有麻烦。
(2)遇到行如A函数这样的,需要对传进来的指针进行非空判断的函数,应该怎么定义该指针的初值?
A的函数是要对字符串进行处理,如果为NULL,就不需要继续下去了,所以直接出啊
goodluckyxl 2006-04-02
  • 打赏
  • 举报
回复
1. 一般来说需要初始化我们c语言比较自由。看c++就提供构造函数也是减低不必要的问题
2. 一般指针经常需要被频繁的申请空间和释放,多次申请释放那就需要释放后赋null值
否则NULL==p判断是不准确的
加菲猫2003 2006-04-02
  • 打赏
  • 举报
回复
指针就是指向地址的,你的要做的就是把指针指向一个还用值得地址,可以,只要你检查法相指针为空,在函数里不做任何操作就可以了
OpenHero 2006-04-02
  • 打赏
  • 举报
回复
(1)一般来说,指针变量需要赋初始值么?
一般char *p = NULL;就行;没初始化可能指向不确定的地方,会出错.

(2)遇到行如A函数这样的,需要对传进来的指针进行非空判断的函数,应该怎么定义该指针的初值? (或者说干脆,就像我写的那样,不定义么?)
这样的函数不是让你放空的指针进去,一定是要求你的指针指向有内容的,如果你的指针内容的都没有,人家给你提供这个函数还检查指针为空干吗:)
du51 2006-04-02
  • 打赏
  • 举报
回复
(1)一般来说,指针变量需要赋初始值么?
不需要.
(2)你写那样就行.不放心的话,定义为*p=NULL;

70,027

社区成员

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

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