• C语言-----野指针


    问题所在

    1、局部指针变量没有被初始化

    2、使用已经释放过后的指针

    3、指针所指向的变量在指针之前被销毁

    4、结构体成员指针未初始化, 没有为结构体指针分配足够的内存 ,内存越界(考虑使用柔性数组)和泄露

    避免规则

    1、用malloc申请了内存之后,应该立即检查指针值是否为NULL,防止使用值为NULL的指针

    2、牢记数组的长度,防止数组越界操作,考虑使用柔性数组

    3、动态申请操作必须和释放操作匹配,防止内存泄露和多次释放
    4、free指针之后必须立即赋值为NULL


    malloc用于从堆中分配一块指定大小的内存,以void *的类型返回这块内存的起始地址。malloc的参数就是要分配的内存的大小,以字节为单位。 
    所以如果要分配1个整型空间就需要malloc(sizeof(int)),由于返回的void *不能直接赋值给int *,所以还要进行一次强制类型转换int * s=(int*)malloc(sizeof(int)); 

    struct Student
    {
    char* name;
    int number;
    };

    int main()
    {
    struct Student s;

    strcpy(s.name, "gggg"); // OOPS!   ////////////////////////////////////野指针,,不能随便赋值,因为s是一个局部变量,name保存的地址是个随机值,不能往随机值里写东西/////////////////////////////////////////////

    s.number = 99;


    return 0;
    }

  • 相关阅读:
    抽样调查
    一次项目上线发布的感想
    Nginx failing to load CSS and JS files (MIME type error)
    securecrt-active
    golang-http-post
    remove-weknow-ac from mac chrome
    批量写入redis
    golang 修改数组中结构体对象的值的坑
    golang使用json生成结构体
    json定义
  • 原文地址:https://www.cnblogs.com/1932238825qq/p/7399179.html
Copyright © 2020-2023  润新知