zoukankan      html  css  js  c++  java
  • 指针和动态存储分配

    动态存储分配

    程序在运行时需要申请存储空间,用来存放信息,但在编程阶段,我们并不知道程序运行的时候需要多大的空间,也不想事先预留一块非常大的区域,因为其中很多空间也许根本不会用得到。针对这个问题,C语言提供了一套机制可以在程序运行时分配存储空间,这块区域成为系统堆(heap)。可以调用malloc函数申请所需大小的一块内存空间。如果当前系统存在空内存,则函数malloc返回指向这块内存起始地址的指针,反之,则返回指针NULL。如果不再用这块存储空间时要记得free释放掉,交还给系统

    int i,*pi;
    float f,*pf;
    pi=(int *)malloc(sizeof(int));
    pf=(float *)malloc(sizeof(float));
    * pi=1024;
    * pf=3.14;
    printf("an_integer=%d,a_float=%f
    ",* pi,* pf);
    free(pi);
    free(pf);

    如果存储空间不足,调用malloc会使申请失败,用一下代码替换上述malloc相应代码

    if((pi=(int *)malloc(sizeof(int)))==NULL) || (pf=(float *)malloc(sizeof(float)))==NULL){
      fprintf(stderr,"Insufficient_memory");
      exit(EXIT_PAILURE);
    }

     或者使用以下等价的代码

    if(!(pi=(int *)malloc(sizeof(int))) || !(pf=(float *)malloc(sizeof(float)))){
      fprintf(stderr,"Insufficient_memory");
      exit(EXIT_FAILURE);
    
    }

    经常使用malloc的话,可以定义宏语句,如下

    #define MALLOC(p,s)
      if(!(p)=malloc(s))){
              fprintf(stdeerr,"Insufficient_memory");
              exit(EXIT_FAILURE);
    }

    则可以直接调用了

    MALLOC(pi,sizeof(int));
    MALLOC(pf,sizeof(float));

    指针隐患

    C程序中让所有尚未指向实际目标的指针都取NULL值,可以尽量避免访问一块尚未申请的空间,或访问一块我们并无权访问的空间。有些计算机在涉及空指针操作时,返回NULL,能够接着执行,而另一些系统,将直接对地址单元0操作,引发严重错误。

    指针类型变量存放的值实际上是内存地址,&取地址操作,*去引用(间接引用)操作 

  • 相关阅读:
    幂次法则power law
    异常值探测的相关理论及方法
    Dynamics CRM2013 1:N关系 sub-grid中的“添加现有项”和“添加新建项”功能详解
    Microsoft Office Excel cannot access the file, There are several possible reasons
    matlab学习日志之并行运算
    Live555 直播源 以及MediaSubsession
    ajax跨域简单请求与复杂请求
    javaScript遍历对象、数组总结
    PHP正则表达式
    语法环境 变量 数据类型 转换 销毁和传值
  • 原文地址:https://www.cnblogs.com/WFM1997/p/9617476.html
Copyright © 2011-2022 走看看