一段小代码,是否出现了野指针? 请大家发表一下对野指针理解!(希望能Show出代码),该如何解决

一段小代码,是否出现了野指针? 请大家发表一下对野指针理解!(希望能Show出代码)
C/C++ code

void  son_fun(int &num, float **p)
{
   *p = new float[num];
}

void mo_fun(int &num, float **pm, float *pn)
{
   float *m_ptemp;
 
   *pm = new float[num];  
   son_fun(num, &m_ptemp);
   
   for(int k = 0; k < num; k++)
    {
       *pm[k] = m_ptemp[k];
    }
   delete []m_ptemp;     
}


请问:我调用mo_fun()的时候,会出现野指针吗?请大家谈一下!(希望能Show出自己代码和对野指针的认识及预防)
(注意:我delete []m_ptemp; 但没有m_ptemp = NULL;因为我认为m_ptemp是一个临时变量,系统会释放它的)

------解决方案--------------------
帮楼主顶上去,
看楼下高手指点啦、、
------解决方案--------------------
http://baike.baidu.com/view/1291320.htm
------解决方案--------------------
你上面的代码 m_ptemp 不会成为野指针

不过建议 delete 后 赋 NULL
------解决方案--------------------
C/C++ code

void  son_fun(int &num, float **p)
{
   *p = new float[num];
}

void mo_fun(int &num, float **pm, float *pn)
{
   float *m_ptemp;
 
   *pm = new float[num];  //不会出现野指针,但这行会出现memory leak
   son_fun(num, &m_ptemp);
   
   for(int k = 0; k < num; k++)
    {
       *pm[k] = m_ptemp[k];
    }
   delete []m_ptemp;     
}

------解决方案--------------------
引用楼主 ranxiutao 的帖子:
C/C++ code
void son_fun(int &num, float **p)
{
*p = new float[num];
}

void mo_fun(int &num, float **pm, float *pn)
{
float *m_ptemp;

*pm = new float[num];
son_fun(num, &m_ptemp);

for(int k = 0; k < num; k++)
{
*pm[k] = m_ptemp[k];
}
delete []m_ptemp;
}



请问:我调用mo_fun()的时候,会出现野指针吗?请大家谈一下!(希望能Show出…

------解决方案--------------------
函数Test在执行语句p->Func()时,对象a已经消失,而p是指向a的,所以p就成了“野指针”。但奇怪的是我运行这个程序时居然没有出错,这可能与编译器有关。

======================
出现了“野指针”,程序并不一定马上出错,甚至不会出错,这应该算“野指针”的一大特点;而它一旦发作,后果就十分严重了,查找这样的问题也十分困难...
好的编程风格就是为了尽量少查找这种本可以避免的问题~
------解决方案--------------------
不会成为野指针,释放内存后你有并没有再使用他,建议设置成NULL
------解决方案--------------------

5 楼不错,挺全面的。

顶顶吧。
------解决方案--------------------
引用楼主 ranxiutao 的帖子:
C/C++ code
void son_fun(int &num, float **p)
{
*p = new float[num];
}

void mo_fun(int &num, float **pm, float *pn)
{
float *m_ptemp;

*pm = new float[num];
son_fun(num, &m_ptemp); //弱弱的问下..&m_ptemp是一个引用还是一个地址??

for(int k = 0; k < num; k++)
{
*pm[k] = m_ptemp[k];
}
delete []m_ptemp;
}

------解决方案--------------------
(注意:我delete []m_ptemp; 但没有m_ptemp = NULL;因为我认为m_ptemp是一个临时变量,系统会释放它的)

可能你还没有搞清楚指针本身和指针指向的东西.

void mo_fun(int &num, float **pm, float *pn)

int&应该改成int

在这里的上下文下用int是最佳的.

如果不是基本类型一般用const T&
或者类型自身提供的const reference

------解决方案--------------------
void son_fun(int &num, float **p) {
*p = new float[num];
}

void mo_fun(int &num, float **pm, float *pn) {