关于指针的问题?
操作系统: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");
}
问题点数:20、回复次数:10Top
1 楼csucdl(csucdl)回复于 2005-10-17 19:52:43 得分 0
void u_p(char *&p)
{
free (p);
p = NULL;
}
Top
2 楼csucdl(csucdl)回复于 2005-10-17 19:56:11 得分 9
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
3 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-10-17 20:01:25 得分 1
printf ("pstr=NULL");//运行后始终不会执行此语句。这是什么原因,应该如何解决?
---------------------------------------------------------------------------
释放的是内存,但指针的值仍然保留的。直接pstr=NULL就得了。Top
4 楼v41dugu(一步一生)回复于 2005-10-17 21:41:44 得分 10
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
5 楼kahn(麟)回复于 2005-10-17 22:52:03 得分 0
觉得楼上在乱说Top
6 楼kahn(麟)回复于 2005-10-17 22:54:22 得分 0
free掉了,当然(( pstr == NULL ) == FALSE )咯Top
7 楼SammyLan((基础决定你能走多远)--英语菜才是真的菜)回复于 2005-10-17 23:23:57 得分 0
C没有引用的吧
Top
8 楼crybird(寒号鸟)回复于 2005-10-17 23:36:12 得分 0
回复人: kahn(麟)
你楼上说的基本正确
a----> |-------|
b----> |-------|
free
|-------|
|-------|
a==NULL之后,
b是不变的,还是指向那个地方Top
9 楼kahn(麟)回复于 2005-10-17 23:55:40 得分 0
嗯,是我错了,p是NULL,pstr还是原先得地址,地址内的值为'a',搞错了,搞错了。Top
10 楼wohow()回复于 2005-10-18 09:12:53 得分 0
v41dugu(一步一生)说的完全正确Top




