zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    RabbitMQ 均衡调度(公平分发机制)
    RabbitMQ 循环调度
    模型绑定与验证笔记
    Controller总结
    JQuery事件绑定,bind与on区别
    View的呈现(一)ActionResult
    C#操作sql时注意点
    mvc4中的过滤器
    Bundle、Intent、SharedPreferences
    SharedPreferences的基本用法
  • 原文地址:https://www.cnblogs.com/1932238825qq/p/7399179.html
Copyright © 2011-2022 走看看