一段小代码,是否出现了野指针? 请大家发表一下对野指针理解!(希望能Show出代码),该如何解决
一段小代码,是否出现了野指针? 请大家发表一下对野指针理解!(希望能Show出代码)
请问:我调用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]; 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; }
------解决方案--------------------
------解决方案--------------------
函数Test在执行语句p->Func()时,对象a已经消失,而p是指向a的,所以p就成了“野指针”。但奇怪的是我运行这个程序时居然没有出错,这可能与编译器有关。
======================
出现了“野指针”,程序并不一定马上出错,甚至不会出错,这应该算“野指针”的一大特点;而它一旦发作,后果就十分严重了,查找这样的问题也十分困难...
好的编程风格就是为了尽量少查找这种本可以避免的问题~
------解决方案--------------------
不会成为野指针,释放内存后你有并没有再使用他,建议设置成NULL
------解决方案--------------------
5 楼不错,挺全面的。
顶顶吧。
------解决方案--------------------
------解决方案--------------------
(注意:我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) {