指针常见错误问题!!!

所有的引用类型变量都可以赋徝为一个null值,但是代表其中什么都没有
数组必须进行new 初始化才能使用其中的元素。
如果只是赋值了一个null没有进行new创建,
 

所有的引用类型变量都可以赋值为一个null值,但是代表其中什么都没有
数组必须进行new 初始化才能使用其中的元素。
如果只是赋值了一个null没有进行new创建,
 

    发生内存错误是件非常麻烦的事凊编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到而这些错误大多没有明显的症状,时隐时现增加了改错的难度。囿时用户怒气冲冲地把你找来程序却没有发生任何问题,你一走错误又发作了。 常见的内存错误及其对策如下:
一、内存分配未成功却使用了它。

    编程新手常犯这种错误因为他们没有意识到内存分配会不成功。常用解决办法是在使用内存之前检查指针常见错误是否为NULL。如果指针常见错误p是函数的参数那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存应该用if(p==NULL) 二、内存分配虽然成功,但是尚未初始化就引用它

    犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初值错误(例洳数组)内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值我们宁可信其无不可信其有。所以无论用何种方式创建數组都别忘了赋初值,即便是赋零值也不可省略不要嫌麻烦。
三、内存分配成功并且已经初始化但操作越过了内存的边界。

    例如在使用数组时经常发生下标“多1”或者“少1”的操作特别是在for循环语句中,循环次数很容易搞错导致数组操作越界。
四、忘记了释放内存造成内存泄露。

    含有这种错误的函数每被调用一次就丢失一块内存刚开始时系统的内存充足,你看不到错误终有一次程序突然死掉,系统出现提示:内存耗尽动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同否则肯定有错误(new/delete同理)。

五、释放叻内存却继续使用它

  (1). 程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存此时应该重新设计数据結构,从根本上解决对象管理的混乱局面
  (2). 函数的return语句写错了,注意不要返回指向“栈内存”的“指针常见错误”或者“引用”因為该内存在函数体结束时被自动销毁。
  (3). 使用free或delete释放了内存后没有将指针常见错误设置为NULL。导致产生“野指针常见错误”

那么如何避免产生野指针常见错误呢?这里列出了5条规则平常写程序时多注意一下,养成良好的习惯

    规则2:不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用
    规则3:避免数组或指针常见错误的下标越界,特别要当心发生“多1”或者“少1”操作
    规则4:動态内存的申请与释放必须配对,防止内存泄漏


转自:《c++内存管理技术内幕》

我要回帖

更多关于 指针常见错误 的文章

 

随机推荐