关于指针的问题?

来源:百度文库 编辑:神马文学网 时间:2024/04/20 06:20:05
主  题:  关于指针的问题?
作  者:  cg_i (半点闲)
等  级:
信 誉 值:  98
所属社区:  C/C++ C语言
问题点数:  20
回复次数:  10
发表时间:  2005-10-17 19:50:33
操作系统:WINXP
编辑器:VC
//头文件省略。。。。
void u_p(char *p)
{
free (p);
p = NULL;
}
void main (void)
{
char *pstr = (char *) malloc (sizeof(char));
*pstr = ‘a‘;
u_p (pstr);
if ( pstr == NULL )
{
printf ("pstr=NULL");//运行后始终不会执行此语句。这是什么原因,应该如何解决?
}
system ("pause");
}
回复人: csucdl(csucdl) ( ) 信誉:100  2005-10-17 19:52:00  得分: 0
void u_p(char *&p)
{
free (p);
p = NULL;
}
Top
回复人: csucdl(csucdl) ( ) 信誉:100  2005-10-17 19:56:00  得分: 0
void u_p(char **p)
{
free (*p);
*p = NULL;
}
void main (void)
{
char *pstr = (char *) malloc (sizeof(char));
*pstr = ‘a‘;
u_p (&pstr);
if ( pstr == NULL )
{
printf ("pstr=NULL");//运行后始终不会执行此语句。这是什么原因,应该如何解决?
}
system ("pause");
}
Top
回复人: megaboy(飞天御剑流之杀神一刀斩) ( ) 信誉:100  2005-10-17 20:01:00  得分: 0
printf ("pstr=NULL");//运行后始终不会执行此语句。这是什么原因,应该如何解决?
---------------------------------------------------------------------------
释放的是内存,但指针的值仍然保留的。直接pstr=NULL就得了。
Top
回复人: v41dugu(一步一生) ( ) 信誉:105  2005-10-17 21:41:00  得分: 0
void u_p(char *p)        //这里的p是临时变量的p啊  和main函数里的pstr并不是一个东西
{
free (p);
p = NULL;       //你这里把这个临时变量p赋为NULL  但是函数结束这个p就消亡了
}
void main (void)
{
char *pstr = (char *) malloc (sizeof(char));
*pstr = ‘a‘;        //这里的pstr始终是指向的动态分配出来的内存啊,你把内存释放了 但是
//pstr并没有被置为NULL啊
u_p (pstr);
if ( pstr == NULL )
{
printf ("pstr=NULL");//运行后始终不会执行此语句。这是什么原因,应该如何解决?
}
system ("pause");
}
Top
回复人: kahn(麟) ( ) 信誉:100  2005-10-17 22:52:00  得分: 0
觉得楼上在乱说
Top
回复人: kahn(麟) ( ) 信誉:100  2005-10-17 22:54:00  得分: 0
free掉了,当然(( pstr == NULL ) == FALSE )咯
Top
回复人: SammyLan(没有窍门,只有努力.LOVE 33 4 Ever) ( ) 信誉:96  2005-10-17 23:23:00  得分: 0
C没有引用的吧
Top
回复人: crybird(寒号鸟) ( ) 信誉:100  2005-10-17 23:36:00  得分: 0
回复人: kahn(麟)
你楼上说的基本正确
a----> |-------|
b----> |-------|
free
|-------|
|-------|
a==NULL之后,
b是不变的,还是指向那个地方
Top
回复人: kahn(麟) ( ) 信誉:100  2005-10-17 23:55:00  得分: 0
嗯,是我错了,p是NULL,pstr还是原先得地址,地址内的值为‘a‘,搞错了,搞错了。
Top
回复人: wohow() ( ) 信誉:100  2005-10-18 09:12:00  得分: 0
v41dugu(一步一生)说的完全正确
Top