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都可以通过遵循基本的编程原则和规范来避免
  • 相关阅读:
    ar游戏开发入门三步走
    什么是 OpenCL OpenGL
    https 服务器搭建
    javascript 访问cookie信息
    手机网页制作需要注意的一点东西
    asp.net下载文件几种方式
    javascriptM
    PDF转JPG
    java实现PDF转HTML
    关于mysql ERROR 1045 (28000)错误的解决办法
  • 原文地址:https://www.cnblogs.com/yanyun888/p/9213247.html
Copyright © 2011-2022 走看看