static这样是否导致野指针

navas 2011-03-18 10:36:13
void pp( )
{
static char *p=NULL;
if( NULL==p )
{
cout << "p is null" << endl;
char kkk[100]="3334566";
p = kkk;
cout << p << endl;
}
else
{
cout << "p is not null." << endl;
cout << p << endl;
}

}
...全文
112 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙哥依旧 2011-03-18
  • 打赏
  • 举报
回复
丑小鸭
navas 2011-03-18
  • 打赏
  • 举报
回复
当执行2次pp()时,第二次的pp走进了else里面,此时的p指向已经释放的内存
LinuxBirdMan 2011-03-18
  • 打赏
  • 举报
回复
p的作用域在函数体内。。。函数退出之后。。。p不可再用。。。觉得应该没什么问题呀。。怎么会造成野指针呢?虽然它一直存在知道程序结束。。。
LinuxBirdMan 2011-03-18
  • 打赏
  • 举报
回复
不过出了这个函数块。。就不能再用p了。。。。
太乙 2011-03-18
  • 打赏
  • 举报
回复
函数返回后,p没问题,p还存在,但是p指向的内存(kkk)已经不复存在了!
RabbitLBJ 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rabbitlbj 的回复:]
楼主可以把这个指针当做返回值返回了把,这样在类外也能释放的。C很多库函数就是这样设计的
[/Quote]

看来是我没有理解正确楼主的意思了。。。。闪了
碎碎念 2011-03-18
  • 打赏
  • 举报
回复
是的,函数执行完以后再试p就会出问题...
RabbitLBJ 2011-03-18
  • 打赏
  • 举报
回复
楼主可以把这个指针当做返回值返回了把,这样在类外也能释放的。C很多库函数就是这样设计的
maoxing63570 2011-03-18
  • 打赏
  • 举报
回复
是的,变量的作用域问题
yuanwang1986 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hqin6 的回复:]
函数返回后,p没问题,p还存在,但是p指向的内存(kkk)已经不复存在了!
[/Quote]

正解,这样下次再访问P时 P已经是一个指向不定位置的指针了,如果想下次继续用的话,应该用malloc开辟的空间付给P,这样下次再进入到这个函数P就可以继续上一次的操作了

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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