您的位置:首页 > 编程语言 > C语言/C++

C/C++内存管理一点问题

2005-10-18 14:46 330 查看
 
 1.常见的内存错误及其对策
      *内存未分配成功却使用了它:
              在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查 ;如果使用malloc或者new来申请内存,应该用if(p==NULL)或if(p!=NULL)进防错处理。
     *无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。
     *内存分配成功并且已经初始化,但操作越过了内存的边界。
     *内存泄露。动态内存的申请与释放必须配对,申请与释放的次数一定要想同。
     *释放了内存却继续使用它(三种情况):
               (1)对象调用关系过于复杂。应重新设计数据结构,解决对象管理混乱局面
               (2)函数注意不要返回指向“栈内存”的“指针”或者“引用”,该内存在函数体结束时会被销毁
               (3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。  
2.指针与数组的对比
     *数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在声明周期内保持不变,只有数组的内容可以改变。
3.修改内容
      企图修改常量字符串的内容导致运行错误。
4.内容复制与比较
      对数组进行复制:strcpy();
     对数组进行比较:strcmp();
     //指针
      int len=strlen(a);
     char *p=(char *)malloc(sizeof(char)*(len+1));
     strcpy(p,a);              //不要用p=a,
     if(strcmp(p,a)==0)  //不要用if(p==a),那是比较地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息