zoukankan      html  css  js  c++  java
  • 内存操作经典问题1

    野指针

    • 指针变量中的值是非法的内存地址,进而形成野指针
    • 野指针不是NULL指针,是指向不可用内存地址的指针
    • NULL指针并无危害,很好判断,也很好调试
    • C语言中无法判断一个指针所保存的地址是否合法

    野指针的由来

    • 局部指针变量没有被初始化
    • 指针所指向的变量在指针之前被销毁
    • 使用已经释放过的指针
    • 进行了错误的指针运算
    • 进行了错误的强制类型转换

    例子1:野指针的实例

    #include<stdio.h>
    #include<malloc.h>
    
    int main()
    {
        int* p1 = (int*)malloc(40);
        int* p2 = (int*)1234567; // p2是一个野指针
    
        int i = 0;
        for(i=0;i<40;i++)
            *(p1+i) = 40-i; // 由于指针运算产生了野指针,改写了非法的内存地址
    
        free(p1);
        printf("%p..
    ",p); // 使用已经释放了的空间
        for(i=0;i<40;i++)
            p1[i] = p2[i];
    
        return 0;
    }
    
    

    基本原则

    • 绝不返回局部变量和局部数组的地址
    • 任何变量在定义后必须0初始化
    • 字符数组必须确认0结束后才能成为字符串
    • 任何使用与内存操作相关的函数必须指定长度信息

    小结

    • 内存错误是实际产品开发中最常见的为题,而绝大多数的bug都可以通过遵循基本的编程原则和规范来避免
  • 相关阅读:
    Linux RAID部署
    系统运维架构师体系
    Linux系统上文件的特殊权限及文件acl
    Linux磁盘使用及文件系统管理
    中小规模网站架构组成
    优化配置模板主机
    网络原理基础
    MySQL二进制安装
    网络通讯基础
    点击改变背景
  • 原文地址:https://www.cnblogs.com/yanyun888/p/9213247.html
Copyright © 2011-2022 走看看