野指针的成因

 我来答
TASG1597
2016-05-18 · TA获得超过137个赞
知道答主
回答量:189
采纳率:50%
帮助的人:57.7万
展开全部

野指针主要是因为这些疏忽而出现的: 当指针p指向的内存空间释放时,没有设置指针p的值为NULL。delete和free只是把内存空间释放了,但是并没有将指针p的值赋为NULL。通常判断一个指针是否合法,都是使用if语句测试该指针是否为NULL。例如: int *p=newint(6);delete p;// 应加入 p=NULL; 以防出错// ...if(p != NULL){  *p=7;  cout << p << endl;}对于使用 free 的情况,常常定义一个宏或者函数 xfree 来代替 free 置空指针: #define xfree(x) free(x); x = NULL;// 在 C++ 中应使用 nullptr 指代空指针// 一些平台上的 C/C++ 已经预先添加了 xfree 拓展,如 GNU 的 libibertyxfree(p);// 用函数实现,例如 GitHub 上的 AOSC-Dev/Anthon-Starter #9:static inline void *Xfree(void *ptr) {    free(ptr);#ifdef __cplusplus    return nullptr;#else    return NULL;#endif}q=Xfree(q);所以动态分配内存后,如果使用完这个动态分配的内存空间后,必须习惯性地使用delete操作符取释放它。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式